Webtreiber warten, bis eines von mehreren Elementen angezeigt wird

Gibt es eine Möglichkeit, awebDriverWait Warten, bis eines von mehreren Elementen angezeigt wird, und basierend auf dem Element, das angezeigt wird, entsprechend handeln?

Im Moment mache ich eineWebDriverWait Innerhalb einer Try-Schleife und wenn eine Timeout-Ausnahme auftritt, führe ich den alternativen Code aus, der darauf wartet, dass das andere Element erscheint. Dies scheint ungeschickt. Gibt es einen besseren Weg? Hier ist mein (plumper) Code:

try:
    self.waitForElement("//a[contains(text(), '%s')]" % mime)
    do stuff ....
except TimeoutException:
    self.waitForElement("//li[contains(text(), 'That file already exists')]")
    do other stuff ...

Es wird 10 Sekunden gewartet, bevor geprüft wird, ob die Meldung, dass die Datei bereits auf dem System vorhanden ist, angezeigt wird.

Die FunktionwaitForElement tut gerade eine Reihe vonWebDriverWait Anrufe wie folgt:

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)

Hat jemand Vorschläge, um dies effizienter zu erreichen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage