Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[US-6-8] Удалить из распознавания невидимые элементы #1287

Closed
1 of 7 tasks
AlexeyGirin opened this issue Jun 5, 2023 · 8 comments · Fixed by #1553
Closed
1 of 7 tasks
Assignees
Labels
A New Hope Team ArtemFeedback tasks related to user's feedback enhancement New feature or request ready for dev task is estimated, described and ready for dev The Good Old Team
Milestone

Comments

@AlexeyGirin
Copy link
Contributor

AlexeyGirin commented Jun 5, 2023

В данный момент - мы никак не помечаем invisible elements ( relates to #171 и #1286)

При этом - их наличие - имеет сомнительную ценность:

  1. Мешает подбирать более простые уникальные локаторы - см. пример из задачи Инвестигировать страницу гугл поиска - а зачем там по две одинаковые кнопки? #1193)
  2. Всё равно будут проигнорированы JDI Light (и VIVIDUS, но не Selenium) по умолчанию, поэтому даже если локаторы у них будут уникальными - всё равно не найдутся (для того что бы нашлись - нужно поставить аннотацию @GetAny или ещё не сделанную аннотацию @GetInvisible (задача на импелементацию - Создать аннотацию @GetInvisible jdi-light#4971) (у Вивидуса - нужно смотреть сюда - https://docs.vividus.dev/vividus/latest/plugins/plugin-web-app.html#_visibility_types)

Поэтому
Необходимо удалить из дерева (если это возможно) все элементы которые не являются видимыми. И только после этого - отправлять это дерево на расчёт локаторов
Если таргет фрэймворк - Selenium, то дерево не чистить - отправлять как есть

Невидимые элементы:

  1. Видимость элемента: Selenium проверяет, что элемент имеет ненулевую ширину и высоту, а также что он не скрыт с помощью CSS-свойства display: none или visibility: hidden. Если элемент имеет нулевые размеры или скрыт, то он считается невидимым.
  2. При отрисовке DOM еще используется index элемента. То есть из-за этого возможна ситуация, когда другой прозрачный/непрозрачный слой перекрывает наш объект и тогда объект визуально мы видим, но клик или другое действие корректно не отрабатывает.
    Еще проверяет, что не перекрыт другим элементом. Спека ведет сюда в качестве референса:
    https://github.com/SeleniumHQ/selenium/blob/a6b161a159c3d581b130f03a2e6e35f577f38dec/javascript/atoms/dom.js#L573

Элементы которые считаются невидимыми:

css property display: none
DOMRect: width/height === 0
css property opacity: 0 - Всё равно видимый элемент
css property visibility: hidden
html attribute "hidden"
css property visibility: collapse
OVERLAPPED by another element
Hidden parrent

Имплементация:

  • на этапе вычисления аттрибутов для рассчета локатров определять видимость элемента ( sendMessage.generateAttributes ). см. комментарий ниже
  • создать скрипт, который будет возвращать DOM с исключенными из него невидимыми элементами
  • создать новый фильтр showInvisible: false, по которому элементы будут фильтроваться в плагине и на странице
  • получать этим скриптом дом для сокета schedule_multiple_xpath_generations в случае, если фильтр showInvisible === false
  • учитывать видимость при валидации локатора
  • учитывать видимость при отображении фильтра классов
  • на фронтэнде поднять минимальную поддерживаемую версию сервера
@MariiaNebesnova
Copy link
Contributor

MariiaNebesnova commented Jun 27, 2023

апи Селениума: https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/webdriver_exports_WebElement.html#isDisplayed

идеально было бы использовать selenium-webdriver и не имплементировать у себя существующий метод isDisplayed для определения (не)видимости элемента
https://www.selenium.dev/selenium/docs/api/javascript/index.html

@artshvyrkov
Copy link

Need to add a new attribute to predict endpoint to pass html pages

@AlexeyGirin
Copy link
Contributor Author

Маша будет чистить страницу на фронте

@MariiaNebesnova MariiaNebesnova removed their assignment Jul 18, 2023
@spiridonovfed
Copy link
Contributor

https://github.com/jdi-testing/jdi-qasp-ml/tree/1287-remove-hidden-elements - ссылка на ветку с работой Артема

@AlexeyGirin AlexeyGirin assigned amshvyrkov and unassigned amshvyrkov Aug 3, 2023
@Iogsotot
Copy link
Contributor

Iogsotot commented Oct 9, 2023

FE PR: #1553
FE extension's zip: 3.14.22
minimum compatible version of BE: 0.2.45

@Ekaterina-Zykova
Copy link

BE PR: jdi-testing/jdi-qasp-ml#160
BE version 0.2.45

@Ekaterina-Zykova
Copy link

added parameter: "is_shown"

@Ekaterina-Zykova
Copy link

fix in mui predict and angular predict
BE PR: jdi-testing/jdi-qasp-ml#165
BE version 0.2.48

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A New Hope Team ArtemFeedback tasks related to user's feedback enhancement New feature or request ready for dev task is estimated, described and ready for dev The Good Old Team
Projects
Status: M (5)
Status: Done
Development

Successfully merging a pull request may close this issue.