Вот скриншот приложения пользовательского интерфейса - это страница yaml
Пользовательский интерфейс — это редактор кода, используемый для ввода или обновления содержимого yaml/json. Я пытаюсь обновить «value1», используя синтаксис пользовательского интерфейса карате, и это, похоже, не работает, ниже приведены испытания.
* string element = "//span[text()='Parent']/following::span[text='Child1']/following::span[text='value1']
#Синтаксические подходы:
* script(element, "_.innerHTML='100'")
* script(element, "_.innerHTML='value1'").input('100')
And waitFor(element).input('100')
* input(element, '100')
When value(element, '100')
* locate(element).input('100')
пример приложения - https://onlineyamltools.com/edit-yaml
образец ямла -
**
parent:
child:
key1: value1
key2: value2
child2:
key3: value3
key4: value4
**
локатор элемента: //span[text()='parent']/following::span[contains(text(),'child')]/following::span[contains(text(),'value1')]
Все, что мне нужно, это иметь возможность обновить «value1» до «100» и сохранить его. Спасибо
Я пробовал * rightOf(elementz).find('{}avlue1').clear().input('100') и это не сработало. Вот пример приложения yaml — onlineyamltools.com/edit-yaml и содержимое yaml ------- parent: child: key1: value1 key2: value2 child2: key3: value3 key4: value4 ---- -------- Все, что мне нужно, это иметь возможность обновить одно из значений «value1» и сохранить его. Спасибо
@PeterThomas, я добавил пример приложения и более подробную информацию к моему запросу выше, пожалуйста, предложите, могу ли я попробовать какие-либо другие подходы, спасибо.
извините, это выглядит действительно хлопотно. это один из самых сложных HTML-кодов, которые я когда-либо видел, что неудивительно, потому что это сложный редактор форматированного текста. Я могу дать только одну подсказку, это даст вам массив из одного Element
(см. документы), в котором есть строка key1: value
: * def temp = locateAll('.CodeMirror-line', x => x.text.contains('value1'))
- остальное зависит от вас. если кто-то просит вас сделать это, мягко объясните, что автоматизация — пустая трата времени.
@PeterThomas Я уже смог найти элемент, однако при попытке обновления с помощью * script(element, "_.innerHTML='100'")
- значение «100» записывается / обновляется в локаторе, но не сохраняется до действия сохранения. Есть ли лучший способ использовать функцию сценария для обновления _.innerHTML
?
учитывая, какой UI я видел, могу с уверенностью сказать - понятия не имею, извините. определенно задействовано много странного javascript, а не только HTML. вам может понадобиться посмотреть на запуск некоторых событий: stackoverflow.com/a/60800181/143475
Я смог добиться этого в селениуме с помощью класса Actions, вот код Actions builder = new Actions(driver); WebElement TimeVal = driver.findElement(By.xpath("//span[text()='value1'][1]")); builder.click(TimeVal).perform(); builder.moveToElement(TimeVal).clickAndHold().sendKeys(Keys.CLEAR).sendKeys("100").perform();
— можно ли сделать подобную реализацию в каратэ? @ПитерТомас
мы можем, но это требует исследования. сейчас лично у меня нет времени
Спасибо @PeterThomas! Я смог сделать это с помощью этого: * mouse(element).click() * input(element, [Key.DELETE, Key.DELETE, Key.BACK_SPACE, Key.BACK_SPACE, '100'])
Теперь мне не нужно переключаться на новый фреймворк. Ценим ваш вклад :)
Замечательно. Я рекомендую вам добавить ответ на свой вопрос (да, это разрешено при переполнении стека) с подробностями, которые помогут другим в будущем. и я обязательно укажу другим на ваши выводы. Спасибо !
Используйте функцию скрипта, чтобы установить для свойства innerHTML элемента новое значение:
* script(element, "_.innerHTML='100'")
Используйте функцию ввода, чтобы установить значение элемента в новое значение:
* input(element, '100')
Используйте функцию значения, чтобы установить значение элемента в новое значение:
* value(element, '100')
Из вашего вопроса неясно, обновляется ли значение элемента на веб-странице или изменения теряются при сохранении страницы.
Если изменения теряются при сохранении страницы, возможно, на странице есть код JavaScript, который сбрасывает значение элемента при сохранении страницы. В этом случае вам может понадобиться использовать другой подход для обновления значения элемента.
Приведенный ниже код/синтаксис карате работает для всех пользовательских интерфейсов, имеющих редакторы кода, как тот, который был опубликован в исходном вопросе:
* mouse(element).click()
* input(element, [Key.DELETE, Key.DELETE, Key.BACK_SPACE, Key.BACK_SPACE, '100'])
События клавиатуры могут находиться в массиве и могут различаться в зависимости от сценария.
невозможно помочь, не видя фактического пользовательского интерфейса (HTML и JS), я предлагаю вам выполнить поиск других ответов и выяснить это самостоятельно: stackoverflow.com/search?q=%5Bkarate%5D+tree+walking