Selenium使用相对XPath定位器显式等待

时间:2017-10-26 20:18:39

标签: python python-3.x selenium xpath selenium-webdriver

在Python 3.4中使用Selenium WebDriver。

我正在编写一个scraper,并使用相对于某些非根祖先元素的XPath定位元素,如下所示:

ancestor_element = driver.find_element_by_xpath(ancestor_xpath)
child_element = ancestor_element.find_element_by_xpath(child_xpath)

这可以按预期工作。但是,我不确定如何使用显式等待调用来执行此相对位置,因为我看到的示例使用此语法:

child_element =  WebDriverWait(driver,10).until(
    EC.presence_of_element_located((By.XPATH, child_xpath))
)

似乎是针对页面根目录评估XPath,并抛出一个错误,抱怨XPath字符串的“.//”开头。

对此有何建议?

1 个答案:

答案 0 :(得分:0)

有同样的问题,请按照@Ron Norris的评论中的lambda示例进行操作。但是,即使使用child_element,文档也不清楚如何找到与ancestor_element相对的lambda

您实际上可以使用driver替换WebDriverWait来电中的ancestor_element,以明确仅搜索ancestor_element下的内容(即使文档字符串指出它必须是WebDriver的一个实例,我发现WebElement也有效。

所以我结束了类似的事情:

child_element =  WebDriverWait(ancestor_element,10).until(
    EC.presence_of_element_located((By.XPATH, child_xpath))
)

如果您想使用lambda,则可以执行以下操作:

child_element =  WebDriverWait(ancestor_element,10).until(
    lambda x: x.find_element_by_xpath(child_xpath)
)