【发布时间】:2012-07-18 11:09:18
【问题描述】:
有没有办法让webDriverWait 等待多个元素之一出现并根据出现的元素采取相应的行动?
目前,我在 try 循环中执行 WebDriverWait,如果发生超时异常,我将运行等待其他元素出现的替代代码。这似乎很笨拙。有没有更好的办法?这是我的(笨拙的)代码:
try:
self.waitForElement("//a[contains(text(), '%s')]" % mime)
do stuff ....
except TimeoutException:
self.waitForElement("//li[contains(text(), 'That file already exists')]")
do other stuff ...
它需要等待整整 10 秒,然后才能查看系统上是否已存在文件的消息。
函数waitForElement 只是像这样执行一些WebDriverWait 调用:
def waitForElement(self, xPathLocator, untilElementAppears=True):
self.log.debug("Waiting for element located by:\n%s\nwhen untilElementAppears is set to %s" % (xPathLocator,untilElementAppears))
if untilElementAppears:
if xPathLocator.startswith("//title"):
WebDriverWait(self.driver, 10).until(lambda driver : self.driver.find_element_by_xpath(xPathLocator))
else:
WebDriverWait(self.driver, 10).until(lambda driver : self.driver.find_element_by_xpath(xPathLocator).is_displayed())
else:
WebDriverWait(self.driver, 10).until(lambda driver : len(self.driver.find_elements_by_xpath(xPathLocator))==0)
有人有任何建议以更有效的方式完成此任务吗?
【问题讨论】:
标签: python selenium webdriver selenium-webdriver wait