python - 如何使用 Selenium 让 WebDriverWait 返回元素而不是 Python 中的 bool 值

标签 python selenium

现在,我有一个方法,可以使用以下方法等待元素可见:

WebDriverWait(self.driver, seconds).until(lambda s: s.find_element_by_xpath(path).is_displayed())

这可以正常工作;但是,它返回一个 bool 值,而不是它找到的元素。我希望它在找到该元素后返回该元素。我正在通过以下方式执行此操作:

def waituntil(path, seconds):
    WebDriverWait(self.driver, seconds).until(lambda s: s.find_element_by_xpath(path).is_displayed())
    ret = self.driver.find_element_by_xpath(path)
    return ret

当然,这有效。不幸的是,它需要 Selenium 两次找到相同的元素,这会增加等待时间(无论多短)。有没有一种方法可以通过仅查找元素一次来使用 waituntil (或类似功能)返回 Web 元素?因此,可以实现以下功能:

ret = WebDriverWait(self.driver, seconds).until(lambda s: s.find_element_by_xpath(path).is_displayed())
ret.click()

我目前正在使用:

Python 2.7
Windows 7
Selenium 2.4.4
Firefox 35.0.1

最佳答案

使用selenium.webdriver.support.expected_conditions.presence_of_element_ located

基于the unofficial docs :

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
ret = WebDriverWait(self.driver, seconds).until(
    expected_conditions.presence_of_element_located((By.XPATH, path)))
ret.click()

(为了清楚起见,省略了其他导入和初始化,因为这些东西似乎可以正常工作。如果遇到问题,请参阅前面的链接。)

关于python - 如何使用 Selenium 让 WebDriverWait 返回元素而不是 Python 中的 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32057220/

相关文章:

python - anaconda 启动器链接不起作用

python - 我如何知道远程进程正在运行或已完成?

python - 阻止由 selenium firefox 驱动程序产生的弹出窗口

python - 我的程序使用了大量内存,我该怎么办?

javascript - Javascript 和 Python 中的异或运算结果不一致

python - 如何在本地错误日志文件中获取 Redshift 错误?

python - 使用 scrapy-splash 会显着影响抓取速度吗?

java - 尽管可用,但元素对于复选框不可见

java - 使用 Selenium 时出现下拉列表问题

regex - 使用正则表达式的 selenium xpath 表达式中的语法错误