2013-07-08 136 views
27

Selenium Python WebDriverのコマンド実行レイテンシの最大時間制限を設定する良い方法を見つけることを試みています。理想的には、Selenium Python WebDriverのデフォルトのタイムアウトを設定するには?

my_driver = get_my_driver() 
my_driver.set_timeout(30) # seconds 
my_driver.get('http://www.example.com') # stops/throws exception when time is over 30  seconds 

のようになります。私は.implicitly_wait(30)を見つけましたが、その結果が望ましいかどうかはわかりません。

有用な場合は、特にWebDriver for Firefoxを使用しています。

EDIT @ ameyの答えを1として

、これは便利かもしれません:

ff = webdriver.Firefox() 
ff.implicitly_wait(10) # seconds 
ff.get("http://somedomain/url_that_delays_loading") 
myDynamicElement = ff.find_element_by_id("myDynamicElement") 

しかし、暗黙の待ち時間が望まれる(getの両方に適用するかどうか私には明確ではありません機能)とfind_element_by_idになります。

ありがとうございました!

+1

私はソースコードを見ていた機能です。 Pythonバインディングにはあいまいです。しかし、C#の場合、 'ImplicitlyWait'は' FindElement/FindElements'に対してのみ機能します(Javaでも同じです)。出典:[1](https://code.google.com/p/selenium/source/browse/dotnet/src/WebDriver/ITimeouts.cs#48)[2](https://code.google.com/ p/selenium/issues/detail?id = 5092) –

+0

ありがとうございます。興味があるなら、私の答えを見てください。 –

答えて

64

は、ロードするページのタイムアウトを作成するための方法は次のとおりです。ページのロードが30秒以上かかるたび

driver.set_page_load_timeout(30) 

これはTimeoutExceptionがスローされます。

+2

これはChromeドライバでは機能しません。 – sorin

+1

詳しい情報の提供や編集には気をつけてください。 –

4

明示的および暗黙的な待機に関する情報は、hereです。

UPDATE thisのもと、私はこれを見るのJavaでは、

WebDriver.Timeouts pageLoadTimeout(long time, 
           java.util.concurrent.TimeUnit unit) 

Sets the amount of time to wait for a page load to complete before throwing an error. If the timeout is negative, page loads can be indefinite. 

Parameters: 
    time - The timeout value. 
    unit - The unit of time. 

のpythonと同等のわかりません。 Pythonで

3

最良の方法は、設定することです好み:

fp = webdriver.FirefoxProfile() 
fp.set_preference("http.response.timeout", 5) 
fp.set_preference("dom.max_script_run_time", 5) 
driver = webdriver.Firefox(firefox_profile=fp) 

driver.get("http://www.google.com/") 
+0

何らかのエラーを返しますか? –

+0

@ivan_bilan: 'Exeption'を意味する場合、いいえ、何も返さない –

+0

' dom.max_script_run_time'はjavascriptを実行するためのタイムアウトを設定します。これは完全なページロードタイムアウトではありません。 –

1

私のソリューションは、ブラウザのloadイベントと一緒に、非同期スレッドを実行し、あった場合、それは、ブラウザを閉じて、ロード機能を再呼び出し持っていましたタイムアウト。

#Thread 
def f(): 
    loadStatus = true 
    print "f started" 
    time.sleep(90) 
    print "f finished" 
    if loadStatus is true: 
     print "timeout" 
     browser.close() 
     call() 

#Function to load 
def call(): 
    try: 
     threading.Thread(target=f).start() 
     browser.get("http://website.com") 
     browser.delete_all_cookies() 
     loadStatus = false 
    except: 
     print "Connection Error" 
     browser.close() 
     call() 

コール()だけ

関連する問題