我要求一般检查页面的所有元素是否已加载。有办法基本上检查吗?
在具体的例子中,有一个页面,我点击了一些按钮,然后我必须等到我点击“下一步”按钮。然而,这个“下一步”按钮是可用的,可选择的,可一直点击。那么如何用selenium检查页面的“状态”(?)?
提醒一下:这是一个关于硒的问题,而不是有问题的网页质量……
由于您的问题是关于python-selenium是否有办法等到页面的所有元素都加载完成,因此答案是否定的。
从根本上讲,您可以编写一行代码(或通过函数实现它)来检查“文档. readyState”==“完成”,如下所示:
self.driver.execute_script("return document.readyState").equals("complete"))
但是这种方法有一个缺点,它没有考虑到要完成的JavaScript/AJAX调用。
编写上面提到的等待页面加载的行默认是通过Selenium实现的。所以重写相同的是一个完全的开销。客户端(即Web浏览器)永远不会将控件返回给WebDriver实例,直到并且除非'Document. readyState'
等于"完成"
。一旦满足这个条件,Selenium执行下一行代码。
值得一提的是,尽管客户端(即Web浏览器)可以在实现等于完成的文件状态后将控件返回给WebDriver实例,但它不能保证新的超文本标记语言DOM上的所有WebElements是否存在、可见、可交互和可点击。
因此,根据我们的要求,如果您必须与之交互的下一个*WebElement在实现等于“完成”的“文档. readyState”时无法交互,您必须结合匹配的expected_conditions来诱导WebDriver等。以下是一些最常用的expected_condition:
element_to_be_clickable(定位器)
presence_of_element_located(定位器)
visibility_of(元素)
您可以在以下链接中找到一些相关的讨论:
可靠地确定页面是否已完全加载可能具有挑战性。没有办法知道是否所有元素都已像那样加载。您必须在每个页面中定义一些“锚点”,以便据您所知,如果这些元素已加载,则可以公平地假设整个页面已加载。通常这涉及测试组合。因此,例如,您可以定义如果以下测试组合通过,则认为页面已加载:
文档. readyState==='完成'
有一种称为Document. readyState
的东西,您可以通过Selenium执行JavaScript脚本来检索它。这不适用于动态加载的内容。它返回以下三种状态之一:
加载文档仍在加载中,没有css或其他资源可用
互动文档已加载完成,无css或其他资源可用
完成文档和css/其他资源都加载完成
您至少在寻找Interactive。您可以通过调用execute_script
来检索状态:
driver.execute_script("return document.readyState")