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

时间:2014-03-28 10:26:53

标签: python selenium xpath python-3.x

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

WebDriverWait(browser,10).until(EC.presence_of_element_located(By.XPATH(('xpath')))

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

澄清:

单个元素 -

WebDriverWait(browser,10).until(EC.presence_of_element_located(By.XPATH(('xpath')))
browser.find_element_by_xpath('xpath')

多元素 -

??
browser.find_elements_by_xpath('xpath')

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

2 个答案:

答案 0 :(得分:5)

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

当您处理多个元素时,WebDriver可能无法知道等待多长时间,因为它不知道您希望在那里有多少元素。

因此,您必须使用明确的等待。

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

  1. 运行find_elements_by_path
  2. 检查步骤的结果是一个包含所需元素数量的集合。如果这不等于您期望的数字,您可以让"服务员"快速失败并再次回合。
  3. 如果以上情况属实,您可以退出"等待"否则,让"服务员"再来一次。
  4. http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

答案 1 :(得分:5)

我迟到了两年但是我想张贴这个,以防有人像我一样在谷歌上搜索。你可以使用

WebDriverWait(browser, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, 'xpath'))
)

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

browser.find_element_by_xpath('xpath')
明确等待后

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