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)

Кто-нибудь получил какие-либо предложения, чтобы сделать это более эффективным способом?

10
задан Paul T. 4 January 2013 в 14:04
поделиться