Python - Selenium - 隐含等待多个元素

Pho*_*nix 1 python selenium xpath python-3.x

目前我使用隐式等待来定位元素,然后才对它们发出任何操作.请参阅隐式等待的示例:

WebDriverWait(browser,10).until(EC.presence_of_element_located(By.XPATH(('xpath')))
Run Code Online (Sandbox Code Playgroud)

这在处理单个元素时工作正常.但是,看起来如果xpath与多个元素相关,EC.presence_of_element_located()则会超时.我的问题是,如何隐式等待多个元素?

澄清:

单个元素 -

WebDriverWait(browser,10).until(EC.presence_of_element_located(By.XPATH(('xpath')))
browser.find_element_by_xpath('xpath')
Run Code Online (Sandbox Code Playgroud)

多元素 -

??
browser.find_elements_by_xpath('xpath')
Run Code Online (Sandbox Code Playgroud)

注意:请注意find_elements_by_xpath()在多个元素实例中使用而不是find_elements_by_xpath()

小智 6

我迟到了两年但是我想发布这个以防万一有人像我一样在谷歌搜索他们的方式.您可以使用

WebDriverWait(browser, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, 'xpath'))
)
Run Code Online (Sandbox Code Playgroud)

这将返回所有这些.你不需要这样做

browser.find_element_by_xpath('xpath')
Run Code Online (Sandbox Code Playgroud)

在显式等待之后,因为WebDriverWait(browser,10).until(...)将返回您正在等待的元素.


Arr*_*ran 5

这里的问题是单个项目更简单.它只需要等到你的定位器返回一个或多个元素.

当你处理多个元素时,WebDriver不可能知道等待多长时间,因为它不知道你期望在那里有多少元素.

因此,您必须使用显式等待.

在这个明确的等待中,你应该:

  1. find_elements_by_path
  2. 检查步骤的结果是一个包含所需元素数量的集合.如果这不等于您期望的数字,您可以让"服务员"快速失败并再次转向.
  3. 如果以上情况属实,您可以退出"等待",否则,让"服务员"再次轮流.

http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp