我要求一般检查是否已加载页面的所有元素。有没有办法检查基本上?
在具体示例中有一个页面,我点击一些按钮,然后我必须等到我点击“下一步”按钮。但是,这个“下一步”按钮可用,可选择并且可以随时点击。那么如何用selenium检查页面的“状态”(?)?
提醒一下:这是一个关于硒的问题,而不是有问题的网页的质量....
可靠地确定页面是否已满载可能具有挑战性。没有办法知道是否所有元素都已加载。您必须在每个页面中定义一些“锚点”,以便您知道,如果已加载这些元素,则可以假设整个页面已加载。通常这涉及测试的组合。例如,您可以定义如果下面的测试组合通过,则认为页面已加载:
document.readyState === 'complete'
有一种叫做document.readyState
的东西可以通过Selenium执行JavaScript脚本来检索。这不适用于动态加载的内容。它返回以下三种状态之一:
正在加载文档仍在加载,没有可用的CSS或其他资源
交互式文档已加载,没有可用的CSS或其他资源
完成加载文档和css /其他资源
你至少在寻找互动。您可以通过调用execute_script
来检索状态:
driver.execute_script("return document.readyState")
正如你的问题是如果有一种方法让python-selenium等到页面的所有元素都已加载,答案是否定的。
从根本上说,您可以编写一行代码(或通过函数实现它)来检查'document.readyState' == "complete"
,如下所示:
self.driver.execute_script("return document.readyState").equals("complete"))
但是这种方法有一个缺点,即它不能解释JavaScript
/ AJAX Calls
要完成。
编写上述行以等待Page Loading
默认情况下通过Selenium
实现。所以重写同样是一个完整的overhead
。除非'document.readyState'
等于"complete"
,否则客户端(即Web浏览器)将永远不会将控件返回给WebDriver实例。一旦满足此条件,Selenium将执行下一行代码。
值得一提的是,虽然客户端(即Web浏览器)可以在达到'document.readyState' equal to "complete"
后将控制权返回给WebDriver实例,但并不认为新HTML DOM
上的所有WebElements都是present
,visible
,interactable
和clickable
。
因此,根据我们的要求,如果在WebElement
达到时你必须与之相互作用的下一个interactable
不是'document.readyState' equal to "complete"
,你必须使用匹配的WebDriverWait
来诱导expected_conditions
相对于个体WebElement
。以下是一些最常用的expected_conditions
:
element_to_be_clickable(locator)
presence_of_element_located(locator)
visibility_of(element)
这是关于'document.readyState' == "complete"
讨论的链接