Селен: Как селен определяет видимые элементы или нет? Возможно ли, что он загружается в DOM, но не отображается в пользовательском интерфейсе?

  1. Селен: Как селен определяет видимые элементы или нет? Возможно ли, что он загружается в DOM, но не отображается в пользовательском интерфейсе? Я хотел бы проверить сценарий, в котором элемент можно щелкнуть, я знаю, что на веб-диске есть метод ElementToBeClickable, однако я хотел бы знать внутреннюю работу. Пожалуйста помоги мне с этим.
  2. Кроме того, как справиться со сценарием, когда элемент загружен в DOM, но пользовательский интерфейс показывает, что загрузка идет, как дождаться полной загрузки?
  3. Пожалуйста, дайте мне знать, если пользовательский интерфейс не загружен, тогда селен напрямую вызовет элемент DOM или, если элемент пользовательского интерфейса загружается, он не выполнит выполнение? Я был бы очень признателен за более подробное объяснение этого вопроса.

person Sunil    schedule 26.02.2018    source источник


Ответы (1)


  • Selenium может определять присутствие или видимость элементов, как только они присутствуют или видимы < / em> в HTML DOM. С точки зрения пользователя вы можете вызвать isDisplayed() в WebElement, чтобы проверить, отображается предполагаемый WebElement или нет. В соответствии с текущей реализацией Selenium может не различать загруженные и визуализированные элементы. ElementToBeClickable метод в ExpectedConditions класс устанавливает ожидание для проверки того, является ли элемент видимым и включен < / em>, чтобы его можно было щелкнуть.

  • Когда элемент загружен в DOM, но пользовательский интерфейс показывает, что загрузка выполняется, вам все равно придется ждать вызовов JavaScript и AJAX < / em>, чтобы завершить загрузку страницы, чтобы все WebElements на странице стали интерактивными. Самое большее дождаться полной загрузки вы можете установить pageLoadStrategy на нормальный, но, возможно, все равно придется вызвать WebDriverWait для предполагаемого WebElement , чтобы стать текущим, видимым, интерактивным или интерактивным.

Здесь вы можете найти подробное обсуждение стратегии загрузки страницы

  • Разумеется, , если пользовательский интерфейс не загружен Selenium, возможно, не сможет взаимодействовать с некоторыми элементами DOM.

Обновлять

В соответствии с вашим встречным вопросом, вот различные этапы WebElement и соответствующие ExpectedConditions для проверки этапов:

  • Наличие элемента:

     presenceOfElementLocated(By locator)
     An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible.
    
  • Видимость элемента:

     visibilityOf(WebElement element)
     An expectation for checking that an element, known to be present on the DOM of a page, is visible. Visibility means that the element is not only displayed but also has a height and width that is greater than 0.
    
  • Элемент должен быть интерактивным:

     elementToBeClickable(By locator)
     An expectation for checking an element is visible and enabled such that you can click it.
    

Примечание. Согласно документации Элемент является Кликабельно - отображается и активируется.

person DebanjanB    schedule 26.02.2018
comment
Спасибо за быстрый ответ. Позвольте мне задать дополнительный запрос об ElementToBeClickable. Я просмотрел официальную документацию и все еще запутался с утверждением. Ожидание проверки того, что элемент виден и включен, так что вы можете щелкнуть по нему. означает ли это, что он будет щелкать только тогда, когда он виден в пользовательском интерфейсе, или он снова имеет какое-то отношение к DOM, я знаю буквальное значение, но все же хотел бы быть уверен. Пожалуйста помоги - person Sunil; 26.02.2018
comment
Спасибо. Пожалуйста, терпите меня и позвольте мне задать последующие запросы, 1) для видимости элемента и элемента, который можно щелкнуть, оба частично связаны с DOM, когда он говорит, что элемент отображается, но также имеет высоту и ширину, превышающие 0 означает ли это, что он проверяет, действительно ли отображается элемент пользовательского интерфейса, или на основе загруженного CSS определяет, что элемент отображается. Единственное, что я пытаюсь гарантировать, это 2.) Есть ли способ утверждать, что элемент действительно отображается на веб-странице или только на основе DOM и загруженного css, html selenium выполняет действия? - person Sunil; 27.02.2018
comment
presence, visibility(displayed) и interactability(clickability) все связаны с разными состояниями WebElement в HTML DOM. Состояния разные. Используйте соответствующие ExpectedConditions в соответствии с вашими требованиями. - person DebanjanB; 27.02.2018
comment
Большое спасибо за разъяснения - person Sunil; 28.02.2018