8

いくつかのテストをSeleniumからWebDriverに移動しています。私の問題は、selenium.wait_for_conditionに相当するものが見つからないことです。Pythonバインディングには現時点でこれがありますか、それともまだ計画されていますか?

4

3 に答える 3

11

現在、WebDriverでwait_for_conditionを使用することはできません。Pythonセレンコードは、古いセレンメソッドにアクセスするためのDrivenSeleniumクラスを提供しますが、wait_for_conditionを実行することはできません。 セレンウィキにはそれに関するいくつかの情報があります。

最善の策は、WebDriverWaitクラスを使用することです。これは、Trueが返されるのを待つ関数を定期的に実行するヘルパークラスです。私の一般的な使用法は

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

このソリューションは決して理想的ではありません。試行/例外は、ページの要求/応答サイクルが遅延して、いくつかのajaxアクティビティが完了するのを待つ場合に必要です。要求/応答サイクルの途中でcompare_sourcegetが呼び出されると、WebDriverExceptionがスローされます。

WebDriverWaitのテストカバレッジも確認するのに役立ちます。

于 2011-11-11T02:38:03.537 に答える
3

これが私のバージョンのGregSadetskyの答えで、関数に入れられます:

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)

ボタンをクリックし、DOMが変更されるのを待ってから、戻ります。

于 2014-04-30T08:10:19.133 に答える
0

Javaバインディングには、Waitクラスが含まれています。このクラスは、タイムアウトに達するまで、条件を繰り返しチェックします(間にスリープがあります)。通常のAPIを使用してJavascriptの完了を検出できる場合は、同じアプローチを取ることができます。

于 2010-09-18T19:20:00.390 に答える