8 Stimmen

selenium.wait_for_condition Äquivalent in Python Bindings für WebDriver

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?

11voto

schickm Punkte 175

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.

3voto

Nimo Punkte 7796

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.

0voto

hwiechers Punkte 13821

Die Java-Bindung enthält eine Wait-Klasse. Diese Klasse prüft wiederholt auf eine Bedingung (mit Pausen dazwischen), bis ein Timeout erreicht ist. Wenn Sie die Fertigstellung Ihres Javascript mit der normalen API erkennen können, können Sie den gleichen Ansatz wählen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X