量角器/ webDriver中的isDisplayed()如何工作?

时间:2018-08-27 19:48:04

标签: selenium-webdriver protractor

在对组织的测试中,突然之间isDisplayed()的使用就不再保持一致。

现在这可能是我们的开发人员改变了的事情。但是我的问题是isDisplayed()到底在做什么?它到底要寻找什么?如何运作?

1 个答案:

答案 0 :(得分:2)

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本身是在webdriver.CommandName中定义的ENUM。

传递的命令(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和由selenium实现的JsonWireProtocol。我已经引用了。 [https://w3c.github.io/webdriver/#element-displayedness]

  

“推荐给实现者的一种方法来确定元素的   能见度最初是由Selenium项目开发的,   基于关于元素性质的粗略近似   树中的关系。通常考虑一个元素   如果在边框内的画布上绘制了它的任何部分,则可见   视口。

     

元素显示算法为布尔状态,其中true   表示元素已显示,而false则表明   元素不显示。要计算元素上的状态,请调用   调用(bot.dom.isShown,null,element)。如果这样做不会产生   错误,请从此函数调用返回返回值。除此以外   返回错误,错误代码未知错误。”

我学到的简单单词:

  1. 如果DOM树中不存在该元素,则调用isDisplayed()将报告NoSuchElementException,这就是量角器具有isPresent() API的原因。

  2. 如果元素大小为零,则硒会将其视为未分配,甚至 在元素上设置dispaly: block CSS

  3. 元素或其显示的父项/祖先的CSS值设置为nonedisplay: none),则不会显示该元素。