2012-05-25 8 views
5

私はいくつかの非常に遅いプロキシで作業しなければならず、そこで私は、このための解決策/回避策を見つけようとしている、ここに私の問題だ:Pythonを使用したSelenium Webdriver(Selenium 2)での明示的な待機と暗黙の待機に関する問題

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

browser = webdriver.Firefox() 
browser.get("http://whateversite.com") 

element = browser.find_element_by_id("element") 
element.click() # go to page http://whateversite.com/page.html 

new_element = browser.find_element_by_id("newElement") 

どんなにあなたが手の前browser.implicitly_wait(30)を設定したり、それだけで立ち往生new_element = WebDriverWait(browser, 30).until(lambda browser : browser.find_element_by_id("newElement"))を使用している場合、時には時間。そのページhttp://whateversite.com/page.htmlが完全にロードされるのを待っているようですが、極端な場合には数時間かかることもあります。

これを避けるにはどうすればよいですか?

+0

実際のブラウザはどのようなものを使用していますか? FirefoxやChromeを使用すると違いがありますか?あなたのコードはうまくいくように見えます。手作業でこれらのサイトにアクセスするとどうなりますか? – aychedee

+0

@ H.Dunlop:Firefox、申し訳ありませんコードを修正しました。 – Shane

+3

[これはなぜタイムアウトエラー(セレン2 webdriver)で終わらないのか教えてください?](http://stackoverflow.com/questions/10757061/tell-me-why-this-does-not-end - タイムアウトエラー - セレン2 - webdriver) – AutomatedTester

答えて

0

不安定な負荷戦略を使用してください。 例FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("webdriver.load.strategy", "unstable"); WebDriver driver = new FirefoxDriver(profile); ` のためにあなたはまた、これを試すhttp://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#current-document-readiness

でより多くの情報を見つけることができます。 driver.manage()。timeouts()。pageLoadTimeout(30、TimeUnit.SECONDS); http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html#pageLoadTimeout%28long,%20java.util.concurrent.TimeUnit%29

0

私はこの問題の良い答えを見たことがないので、私は私の解決策を与えるだろうと思った。私はセレンを使って何度もこれに遭遇しました。ハック・イットのように、私は期待しています。 expectは本当にシンプルなtclベースの言語で、他のプログラムを簡単に生成し、入力やタイムアウトを待って何かをすることができます。そう基本的に代わり、SELの待機を使用して、私は待つようにPythonの睡眠を使用する関数を作成します。

def wait(waittime=30): 
    print 'kick' 
    time.sleep(waittime) 

.. 

、私はrun.exp作成:基本的に、すべてのthats

set timeout 30 
set try 0 

while 1 { 
    spawn /usr/bin/python test.py 
     while 1 { 
      expect "kick" {exp_continue} 
      timeout { 
       if {$try > 5} { 
        exit 
       } 
       incr try 
      } 
     } 
    } 
} 

をし、それは通常、本当によく働きますプログラムがハングアップするとプログラムを再起動しようとします。 5回の試行の後、それはそれ自身を殺す。また、さまざまな州などでプログラムを再起動する方法に関するより多くのコントロールを持つことができます。

関連する問題