jdi-testing / jdn-ai

JDN – is the Chrome plugin for UI test automation. It helps Software Test Automation Engineer to create Page Objects for the test automation framework and start test development fast
MIT License
9 stars 3 forks source link

Инвестигировать страницу гугл поиска - а зачем там по две одинаковые кнопки? #1193

Closed AlexeyGirin closed 1 year ago

AlexeyGirin commented 1 year ago

На сессии фидбэка Артём удивился тому, что несмотря на то, что система распознала элемент на страничке (https://www.google.com/) и дала ему имя "btnI", но в то же время - локатор привязался не к имени, а к атрибуту data-ved (data-ved='0ahUKEwiR-e6zpbj-AhX4T6QEHX-9Br0Q19QECBI']) Я полез в код странички. Там действительно - есть ДВА элемента у которых имя - name="btnI"

1. <input class="RNmpXc" value="Мне повезёт!" aria-label="Мне повезёт!" name="btnI" type="submit" jsaction="trigger.kWlxhc" data-ved="0ahUKEwiR-e6zpbj-AhX4T6QEHX-9Br0Q19QECAo">
2. <input class="RNmpXc" value="Мне повезёт!" aria-label="Мне повезёт!" name="btnI" type="submit" jsaction="trigger.kWlxhc" data-ved="0ahUKEwiR-e6zpbj-AhX4T6QEHX-9Br0Q19QECBI">

И действительно - они различаются только значением атрибута data-ved

При этом - второй элемент на страничке не виден (при клике на локатор - выделения не происходит - видимо этот элемент скрытый) image

Необходимо понять - зачем этот элемент находится в доме и возможно - такие элементы нам совсем не нужны (моя теория - это типа какой-то shadow DOM который мы не поддерживаем, может такое быть?)

[Yesterday 21:07] Artem Rozumenko Привет  но при этом visible только одна - и да если делать по коду страницы без контекста, то штука права, а если по контексту, то нет )

Под контекстом имеется ввиду visibility?

AlexeyGirin commented 1 year ago

Возможность использовать рантайм атрибуты для адресации элемента - например Visible, Clickable и Enabled (ну и там ещё другие)

Нужен пример от @MaksimMeshcheriakovEPAM - как будет выглядеть локатор с учётом Visible, Clickable и Enabled

MariiaNebesnova commented 1 year ago

потребуется доработка робулы и генераторов, чтобы возвращался неуникальный локатор, но со свойством invisible. по этому же свойству мы добавляем флаг в значение локатора

RomanIovlev commented 1 year ago

В JDI

@UI('['value="Мне повезёт!"])
public  imLucky;

найдет только один элемент - видимый ничего дополнительного делать не надо

AlexeyGirin commented 1 year ago

Нужно делать пост процессинг - мы знаем какие элементы Visible

  1. JDI по умолчанию - ищет ТОЛЬКО visible элементы (VIVIDUS, кстати, тоже - https://docs.vividus.dev/vividus/latest/plugins/plugin-web-app.html#_visibility_types). Поэтому - нужно перед отправкой робуле дерева - удалять оттуда инвизибл элементы
  2. Для локатороы для инвизибл элементов - использовать ПОЛНОЕ дерево, но на инвизибл элементы дополнительно вешать аннотацию @GetAny иначе JDI даже используя правильный локатор - ничего не найдёт (для VIVIDUS см. - https://docs.vividus.dev/vividus/latest/plugins/plugin-web-app.html#_visibility_types)
  3. В JDI Light нужно добавить аннотацию @GetInvisible - https://github.com/jdi-testing/jdi-light/issues/4971
  4. С экспортом с Selenium - ОТПРАВЛЯТЬ полное дерево (т.е. делать как сейчас) - селениум не поддерживает поиск по визибилити и будет находить первый элемент
savinovava commented 1 year ago

Инвестигация завершена.

AlexeyGirin commented 1 year ago

Эта задача будет выполнена когда мы выполним - https://github.com/jdi-testing/jdn-ai/issues/1287