如何确保是否为Selenium+;加载了一些HTML元素;python

如何确保是否为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

通过这个链接,我假设DOM首先应该作为一个整体加载到RAM中

但是我在Selenium中测试了一个超时异常。似乎即使引发了超时异常,也可以找到一些元素,因此它不是空对象

但我想知道,我如何确保一些元素已经加载?例如,在HTML示例中,如何确保加载所有
元素?考虑到我实际上不知道
元素的数量这一事实

代码试用:

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&amp;o=1">Symbol</a></th>
           <th id="f13" style="width: 267px;"><a href="t/?i=614&amp;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
在inconjunction的帮助下,实现这些缩小的搜索条件可以节省大量的执行时间

  • 如何确保所有元素都已加载?
    :同样,我们的测试应该只关注我们需要与之交互的元素,而不是验证我们不感兴趣的其他元素的状态/条件

  • 现在,根据上面提到的两点,这是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")))
    
注意:本图中使用的xpath是仅用于演示目的的示例xpath


我通过检查HTML的加载行为找到了答案


基本上HTML是颠倒加载的,也就是说,我只需要检查元素后面是否有元素,例如,如果后面有另一个元素,只需检查是否有另一个元素出现。如果是,则必须加载所有元素

Thnx,答案不是我想要的,只是我知道我可以在selenium中保存DOM元素的许多属性。这与驱动程序的隐式或显式超时有何不同?