如何使用Selenium在Python中使用WebDriverWait返回元素而不是布尔值

如何使用Selenium在Python中使用WebDriverWait返回元素而不是布尔值,python,selenium,Python,Selenium,现在,我有一个方法,它将使用以下命令等待元素可见: WebDriverWait(self.driver, seconds).until(lambda s: s.find_element_by_xpath(path).is_displayed()) 这工作正常;但是,它返回一个布尔值,而不是它找到的元素。我希望它在找到元素后返回该元素。我是这样做的: def waituntil(path, seconds): WebDriverWait(self.driver, seconds).unt

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

WebDriverWait(self.driver, seconds).until(lambda s: s.find_element_by_xpath(path).is_displayed())
这工作正常;但是,它返回一个布尔值,而不是它找到的元素。我希望它在找到元素后返回该元素。我是这样做的:

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
ret = WebDriverWait(self.driver, seconds).until(lambda s: s.find_element_by_xpath(path).is_displayed())
ret.click()
当然,这是有效的。不幸的是,它需要Selenium两次找到相同的元素,这增加了等待时间(无论多小)。是否有一种方法可以使用waituntil(或类似的功能)通过只查找一次元素来返回web元素?因此,可以允许以下情况:

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
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\u条件。存在\u元素\u位置

基于:

(为了清晰起见,省略了其他导入和初始化,因为您似乎已经完成了这些工作。如果遇到问题,请参阅前面的链接。)