如何确保是否为Selenium+;加载了一些HTML元素;python
通过这个链接,我假设DOM首先应该作为一个整体加载到RAM中 但是我在Selenium中测试了一个超时异常。似乎即使引发了超时异常,也可以找到一些元素,因此它不是空对象 但我想知道,我如何确保一些元素已经加载?例如,在HTML示例中,如何确保加载所有如何确保是否为Selenium+;加载了一些HTML元素;python,python,html,selenium,dom,selenium-webdriver,Python,Html,Selenium,Dom,Selenium Webdriver,通过这个链接,我假设DOM首先应该作为一个整体加载到RAM中 但是我在Selenium中测试了一个超时异常。似乎即使引发了超时异常,也可以找到一些元素,因此它不是空对象 但我想知道,我如何确保一些元素已经加载?例如,在HTML示例中,如何确保加载所有元素?考虑到我实际上不知道元素的数量这一事实 代码试用: driver = webdriver.Chrome() driver.set_page_load_timeout(10) try: driver.get(url) print
元素?考虑到我实际上不知道
元素的数量这一事实
代码试用:
driver = webdriver.Chrome()
driver.set_page_load_timeout(10)
try:
driver.get(url)
print('load success!')
except TimeoutException:
print(self.page_source)
示例HTML:
<table width="910" border="0" cellpadding="3" cellspacing="0" id="fth1_" class="fth1_" style="display: none; position: fixed; top: 29px; left: 99px;">
<thead style="background-color: rgb(233, 233, 233);">
<tr align="center">
<th id="f13" style="width: 121px;"><a href="t/?i=614&o=1">Symbol</a></th>
<th id="f13" style="width: 267px;"><a href="t/?i=614&o=2">Name</a></th>
</tr>
</thead>
</table>
根据您的代码试用,您正在使用ChromeDriver和Chrome Browser自动执行这些步骤。当您配置了
set\u page\u load\u timeout(10)
时,会引发超时异常,因为页面未在通过set\u page\u load\u timeout()
配置的时间范围内完全加载。但是,当您调用print(self.page\u source)
时,将检索部分呈现的元素
现在,关于您的个人查询:
:理想的测试用例应该有一个明确的步骤,例如验证元素的存在、验证元素的可见性或验证元素的可交互性(单击时)。从这个角度来看,验证已加载的元素可能不包括所需的元素。因此,您需要将搜索条件缩小到某个确定的范围,而不是更广泛的搜索条件如何确保某些元素已经加载?
- 页面标题
- 页眉
- 警报的出现
- 元素的属性
- 元素的存在
- 一组元素的存在
- 元素的可见性
- 一组元素的可见性
- 元素的可点击性
- 元素的过时性
- 框架可用并切换到IT
:同样,我们的测试应该只关注我们需要与之交互的元素,而不是验证我们不感兴趣的其他元素的状态/条件如何确保所有元素都已加载?
- 现在,根据上面提到的两点,这是3个最常用的用例:
- :检查页面的DOM上是否存在元素的期望值。这并不一定意味着元素是可见的
- :检查元素是否存在于页面的DOM中且可见的期望。可见性意味着不仅显示图元,而且其高度和宽度都大于0
- :检查元素的期望值可见并已启用,以便您可以单击它
- 根据您提到的用例,您可以在等待WebDriverWait的可配置时间量的同时,在中列出所有可见的
元素,如下所示:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC headerList = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//table[@class='fth1_' and @id='fth1_']/thead/tr//th")))
我通过检查HTML的加载行为找到了答案
基本上HTML是颠倒加载的,也就是说,我只需要检查元素后面是否有元素,例如,如果后面有另一个元素,只需检查是否有另一个元素出现。如果是,则必须加载所有元素 Thnx,答案不是我想要的,只是我知道我可以在selenium中保存DOM元素的许多属性。这与驱动程序的隐式或显式超时有何不同?