C'è un modo per ottenere un webDriverWait
in attesa che uno di un numero di elementi appaia e di agire di conseguenza in base all'elemento che appare?webdriver attendere che compaia uno degli elementi multipli
Al momento eseguo un WebDriverWait
all'interno di un ciclo di prova e se si verifica un'eccezione di timeout, eseguo il codice alternativo che attende che l'altro elemento venga visualizzato. Questo sembra maldestro. C'è un modo migliore? Qui è il mio codice (goffo):
try:
self.waitForElement("//a[contains(text(), '%s')]" % mime)
do stuff ....
except TimeoutException:
self.waitForElement("//li[contains(text(), 'That file already exists')]")
do other stuff ...
Coinvolge in attesa di un intero 10 secondi prima che si cerca di vedere se il messaggio che il file è già presente sul sistema.
La funzione waitForElement
solo che un certo numero di WebDriverWait
chiamate in questo modo:
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)
Qualcuno ha qualche suggerimento per realizzare questo in modo più efficiente?
grazie. Funzionerà. – amadain