webdriver等待多个元素之一出现
是否有办法让a webDriverWait
等待许多元素之一出现并根据哪个元素出现而采取相应的行动?
目前,我WebDriverWait
在try循环中执行了一个操作,如果发生超时异常,我将运行备用代码,等待其他元素出现。这看起来很笨拙。有没有更好的办法?这是我的(笨拙的)代码:
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)
有人有任何建议以更有效的方式完成此任务吗?
回答:
创建一个将标识符映射到xpath查询并返回匹配标识符的函数。
def wait_for_one(self, elements): self.waitForElement("|".join(elements.values())
for (key, value) in elements.iteritems():
try:
self.driver.find_element_by_xpath(value)
except NoSuchElementException:
pass
else:
return key
def othermethod(self):
found = self.wait_for_one({
"mime": "//a[contains(text(), '%s')]",
"exists_error": "//li[contains(text(), 'That file already exists')]"
})
if found == 'mime':
do stuff ...
elif found == 'exists_error':
do other stuff ...
以上是 webdriver等待多个元素之一出现 的全部内容, 来源链接: utcz.com/qa/401549.html