根据你的代码试验使用的是 ChromeDriver 和 Chrome的浏览器 ,以 自动化
的步骤。配置完后,由于在通过配置
set_page_load_timeout(10)的 时间 内未完全加载页面,因此引发了 超时
异常
set_page_load_timeout()。但是,当您调用
print(self.page_source)了部分呈现的 HTML
DOM 内呈现的元素时,将对其进行检索。
现在关于您的单个查询:
How can I make sure some elements are already loaded?
:理想的 测试用例 将具有确定的步骤,例如,验证元素的存在,验证元素的可见性或验证元素的交互性(单击时)。从这个角度来看,验证 已经加载 的 元素 可能不包含所需的元素。因此,您需要将 搜索标准 范围缩小到某个确定的事物,而不是像这样 更宽泛 的 搜索条件 ,例如- 页面标题
- 页面标题
- 警报的存在
- 元素的属性
- 元素的存在
- 一组元素的存在
- 元素的可见性
- 一组元素的可见性
- 元素的可点击性
- StalenessOf元素
- frameToBeAvailableAndSwitchToIt
实现这些缩小 搜索条件 可以节省大量的 执行时间 的帮助下WebDriverWait
与inconjunctionexpected_conditions
。
How can I make sure all elements are loaded?
:同样,我们的测试应仅集中在我们需要与之交互的元素上,而忽略验证与我们无关的其他元素的状态/条件。现在,按照上面提到的两点,这是3种最常用的用 例 :
presence_of_element_located
:检查页面DOM中是否存在元素的期望。这并不一定意味着该元素是可见的。visibility_of_element_located
:期望检查元素是否存在于页面的DOM上并且可见。可见性意味着不仅显示元素,而且其高度和宽度都大于0。element_to_be_clickable
:检查元素的期望是可见的并且已启用,因此您可以单击它。- 根据您提到的用 例 ,您可以使 DOM树 中所有元素的 列表
<th>
可见,同时等待诱导 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[@ and @id='fth1_']/thead/tr//th")))
注意 :此插图中使用的 xpath 是仅用于演示目的的示例 xpath 。



