2012-05-25 9 views
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を使用すると、同じ結果になります。さこれがタイムアウトエラー(セレン2 webdriver)で終わらない理由を教えてください。

私のポイントは、あなたがそれが悪いため、プロキシのアップロードするために、ページのにも、時間を取る可能性がある要素をクリックし、時には後、で、あなたは明らかには、あなたが望むもの、長いものを待ちたくありませんタイムアウト例外。この場合、どのように機能させるのですか?

答えて

4

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

これはおそらく、Pythonのためにセレン2.22になり、その後、あなたのテストケースは、おそらくそれが設定されると失敗します

+0

私はあなたが何を意味するかは分かりません。もっと具体的にしてください、どうすればいいですか? – Shane

+0

...そして2.22にアップグレードすると、私は無意識にこの暗黙の待ちに頼ったすべての場所を実現しました。 XD – Isaac

+0

私はこれがかなり正しいとは思わない。あなたはdriver.set_page_load_timeout()について話していますが、それはクリックと関係ないと思います。すべてのクリックでページが読み込まれるわけではありません。ページの読み込みタイムアウトは、ページを読み込むためのものです。質問者は要素を見つけるだけでタイムアウトに問題があります(クリックする必要はありません)。 – Purrell

0

ザ・webdriverを待ち上の方法は、条件にoccures要素が見つからない例外やその他の例外を無視するまで指定した期間、指定します。与えられた時間の後、あなたは要素が存在しないならば、そのような要素の例外を最初に得るでしょう。あなたがこの問題を回避を試みることができるあなたの必要性のために

をway- - >ページロード が存在する後にボタンにフォーカスを持参 - >ないwebdriverをクリック以来、Javaコードでクリックを(火災。 )次のページがロードされるのを待ちます。 - > thread.sleepを2番目または2番目に入れます。 - >要素のプリセンスをチェックします。

+0

Pythonでどのように動作するかわかりません。しかし、それはJavaでどうなっているのか。 – QVSJ

+0

私はあなたの仕事を完全に理解しています。しかし、問題がちょっと見れば、 'browser.find_element_by_id(" idstuff ")'もあります。つまり、そのページが完全に読み込まれるまでその要素が存在するかどうかを実際に調べ始めるわけではありません。この仕組みに入っていますが、これをコントロールすることができないので、このバグはたくさんあります。 – Shane

+0

まだ試していないのであれば、ここに何かがあるかどうかを知ることができます(このページのコメント4は有望です)http://code.google.com/p/selenium/issues/detail?id=687 。ランダムな検索の後に来る。いいえgategoriesies :) - – QVSJ