Ich verschiebe einige Tests von Selenium zum WebDriver. Mein Problem ist, dass ich keine Entsprechung für selenium.wait_for_condition finden kann. Haben die Python Bindungen dies im Moment, oder ist es noch geplant?
Antworten
Zu viele Anzeigen?Derzeit ist es nicht möglich, wait_for_condition mit WebDriver zu verwenden. Der Python-Selenium-Code bietet die DrivenSelenium-Klasse für den Zugriff auf die alten Selenium-Methoden, aber es kann nicht wait_for_condition tun. Das Selenium-Wiki enthält einige Informationen dazu .
Am besten ist es, die Klasse WebDriverWait zu verwenden. Dies ist eine Hilfsklasse, die periodisch eine Funktion ausführt und darauf wartet, dass sie True zurückgibt. Meine allgemeine Verwendung ist
driver = webdriver.Firefox()
driver.get('http://example.com')
add = driver.find_element_by_id("ajax_button")
add.click()
source = driver.page_source
def compare_source(driver):
try:
return source != driver.page_source
except WebDriverException:
pass
WebDriverWait(driver, 5).until(compare_source)
# and now do some assertions
Diese Lösung ist keineswegs ideal. Der try/except ist notwendig für Situationen, in denen der Anfrage/Antwort-Zyklus der Seite verzögert wird, während man auf den Abschluss einer Ajax-Aktivität wartet. Wenn compare_source in der Mitte des Anfrage/Antwort-Zyklus aufgerufen wird, wird eine WebDriverException ausgelöst.
El Testabdeckung für WebDriverWait ist ebenfalls hilfreich.
Hier ist meine Version von Greg Sadetskys Antwort, die ich in eine Funktion umgewandelt habe:
def click_n_wait(driver, button, timeout=5):
source = driver.page_source
button.click()
def compare_source(driver):
try:
return source != driver.page_source
except WebDriverException:
pass
WebDriverWait(driver, timeout).until(compare_source)
Er klickt auf die Schaltfläche, wartet, bis sich das DOM ändert, und kehrt dann zurück.