7
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

browser = webdriver.Firefox()

browser.get("http://testsite.com")

element = WebDriverWait(browser, 10).until(lambda browser : browser.find_element_by_id("element"))

element.click() # it actually goes to page http://testsite.com/test-page.html

print "Just clicked! And I'm expecting timeout error!"

new_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element"))

print "Too bad there's no timeout error, why?!"

ご覧のとおり、待ち時間を 0.1 秒に設定しても、まだタイムアウト例外はスローされません。実行するelement.click()と、ページ全体が読み込まれるまでブロックされないため、表示されました。Just clicked! And I'm expecting timeout error!驚いたことにnew_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element"))、ページ全体が読み込まれるまで待ちます。を使用するimplicit waitsと、同じ結果が得られます。

私のポイントは、要素をクリックした後、プロキシが悪いためにページが読み込まれるまでに数時間かかる場合があることです. この場合、どのように機能させますか?

4

2 に答える 2

4

クリックには、ページが読み込まれるまで待機する暗黙の待機が組み込まれています。Selenium がページの読み込みを待機する時間を設定できるようにする作業があり、現在は FirefoxDriver でのみ完了しています。

これはおそらくPython用のSelenium 2.22にあり、設定するとテストケースが失敗する可能性があります

于 2012-05-25T15:26:56.463 に答える
0

webdriver 待機の Until メソッドは、指定した期間、指定した条件で発生する要素が見つからない例外およびその他の例外を無視します。指定された時間が経過すると、要素が存在しない場合は最初に no such element 例外が発生し、次に 'no such element' 例外を処理すると (できれば try catch で) タイムアウト例外が発生します。

必要に応じて、この方法で回避策を試すことができます-

-> ページが読み込まれた後、ボタンにフォーカスを移動します -> Java コードでクリックを起動します (クリックは次のページが読み込まれるのを待つため、webdriver ではありません)。 -> thread.sleep を 1 秒間置くか、 2 -> 要素の存在を確認します。

于 2012-05-26T10:00:39.097 に答える