在对组织的测试中,突然之间isDisplayed()
的使用就不再保持一致。
现在这可能是我们的开发人员改变了的事情。但是我的问题是isDisplayed()
到底在做什么?它到底要寻找什么?如何运作?
答案 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)。如果这样做不会产生 错误,请从此函数调用返回返回值。除此以外 返回错误,错误代码未知错误。”
我学到的简单单词:
如果DOM树中不存在该元素,则调用isDisplayed()
将报告NoSuchElementException
,这就是量角器具有isPresent()
API的原因。
如果元素大小为零,则硒会将其视为未分配,甚至
在元素上设置dispaly: block
CSS
元素或其显示的父项/祖先的CSS值设置为none
(display: none
),则不会显示该元素。