Как работает isDisplayed () в транспортире / webDriver? - PullRequest
0 голосов
/ 27 августа 2018

Внезапно в нашем тестировании для нашей организации использование isDisplayed() просто перестало быть последовательным.

Теперь это может быть то, что наши разработчики изменили. Но мой вопрос, что isDisplayed() делает под капотом? Что именно это выглядит? Как это работает?

1 Ответ

0 голосов
/ 28 августа 2018

isDisplayed ищет, отображается ли элемент на экране браузера. Свойство display проверяет, находится ли какая-либо часть нарисованного элемента внутри области просмотра. Это определяется алгоритмом. В селене он реализован следующим образом.

/**
   * Test whether this element is currently displayed.
   *
   * @return {!Promise<boolean>} A promise that will be
   *     resolved with whether this element is currently visible on the page.
   */
  isDisplayed() {
    return this.execute_(
        new command.Command(command.Name.IS_ELEMENT_DISPLAYED));
  }

IS_ELEMENT_DISPLAYED сам по себе является ENUM, определенным в webdriver.CommandName.

Команда передана (IS_ELEMENT_DISPLAYED) использует JsonWireProtocol для получения отображаемого свойства с использованием следующего метода get:

session/:sessionId/element/:id/displayed
GET /session/:sessionId/element/:id/displayed
Determine if an element is currently displayed.
URL Parameters:
:sessionId - ID of the session to route the command to.
:id - ID of the element to route the command to.
Returns:
{boolean} Whether the element is displayed.
Potential Errors:
NoSuchWindow - If the currently selected window has been closed.
StaleElementReference - If the element referenced by :id is no longer attached to the page's DOM.

Из W3C и JsonWireProtocol, который реализован селеном. Я цитировал это. [https://w3c.github.io/webdriver/#element-displayedness]

"Подход, рекомендованный разработчикам для определения элемента видимость была первоначально разработана проектом Selenium и является на основе грубых приближений о природе элемента и отношения в дереве. Элемент, как правило, должен рассматриваться видно, если какая-то его часть нарисована на холсте в границах окна просмотра.

Алгоритм отображаемого элемента является логическим состоянием, где true означает, что элемент отображается, а false означает, что элемент не отображается. Чтобы вычислить состояние элемента, вызовите Call (bot.dom.isShown, null, element). Если это не дает ошибка, вернуть возвращаемое значение из этого вызова функции. Иначе вернуть ошибку с кодом ошибки неизвестная ошибка. "

Простые слова, которые я выучил:

  1. Если элемент отсутствует в дереве DOM, вызов isDisplayed() сообщит NoSuchElementException, поэтому транспортир имеет isPresent() API.

  2. Если размер элемента равен нулю, селен будет обрабатывать его как не показанный даже установить dispaly: block CSS на элемент

  3. или значение CSS отображения его родителя / предков установлено на none (display: none), элемент не отображается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...