Как ввести значение в пользовательский интерфейс на основе yaml с помощью автоматизации пользовательского интерфейса Karate

Вот скриншот приложения пользовательского интерфейса - это страница 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')
  • script(element, "_.innerHTML='100'") - работало, но значение "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» и сохранить его. Спасибо

невозможно помочь, не видя фактического пользовательского интерфейса (HTML и JS), я предлагаю вам выполнить поиск других ответов и выяснить это самостоятельно: stackoverflow.com/search?q=%5Bkarate%5D+tree+walking

Peter Thomas 09.12.2022 04:00

Я пробовал * 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» и сохранить его. Спасибо

J100 09.12.2022 05:00

@PeterThomas, я добавил пример приложения и более подробную информацию к моему запросу выше, пожалуйста, предложите, могу ли я попробовать какие-либо другие подходы, спасибо.

J100 09.12.2022 05:10

извините, это выглядит действительно хлопотно. это один из самых сложных HTML-кодов, которые я когда-либо видел, что неудивительно, потому что это сложный редактор форматированного текста. Я могу дать только одну подсказку, это даст вам массив из одного Element (см. документы), в котором есть строка key1: value: * def temp = locateAll('.CodeMirror-line', x => x.text.contains('value1')) - остальное зависит от вас. если кто-то просит вас сделать это, мягко объясните, что автоматизация — пустая трата времени.

Peter Thomas 09.12.2022 06:19

@PeterThomas Я уже смог найти элемент, однако при попытке обновления с помощью * script(element, "_.innerHTML='100'") - значение «100» записывается / обновляется в локаторе, но не сохраняется до действия сохранения. Есть ли лучший способ использовать функцию сценария для обновления _.innerHTML?

J100 09.12.2022 18:57

учитывая, какой UI я видел, могу с уверенностью сказать - понятия не имею, извините. определенно задействовано много странного javascript, а не только HTML. вам может понадобиться посмотреть на запуск некоторых событий: stackoverflow.com/a/60800181/143475

Peter Thomas 09.12.2022 19:01

Я смог добиться этого в селениуме с помощью класса 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(); — можно ли сделать подобную реализацию в каратэ? @ПитерТомас

J100 23.12.2022 23:51

мы можем, но это требует исследования. сейчас лично у меня нет времени

Peter Thomas 24.12.2022 06:03

Спасибо @PeterThomas! Я смог сделать это с помощью этого: * mouse(element).click() * input(element, [Key.DELETE, Key.DELETE, Key.BACK_SPACE, Key.BACK_SPACE, '100']) Теперь мне не нужно переключаться на новый фреймворк. Ценим ваш вклад :)

J100 04.01.2023 19:06

Замечательно. Я рекомендую вам добавить ответ на свой вопрос (да, это разрешено при переполнении стека) с подробностями, которые помогут другим в будущем. и я обязательно укажу другим на ваши выводы. Спасибо !

Peter Thomas 04.01.2023 19:09
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
10
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте функцию скрипта, чтобы установить для свойства 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'])

События клавиатуры могут находиться в массиве и могут различаться в зависимости от сценария.

Другие вопросы по теме