webdriver ожидает появления одного из нескольких элементов
Есть ли способ получить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)
Кто-нибудь получил какие-либо предложения, чтобы сделать это более эффективным способом?