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?