2013-07-08 17 views
27

Selenium Python WebDriver'da komut yürütme gecikmesi için maksimum süre sınırı belirlemenin iyi bir yolunu bulmaya çalışın. İdeal olarak, bir şey gibi:Selenium Python WebDriver varsayılan zaman aşımı nasıl ayarlanır?

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 

işe yarar. .implicitly_wait(30)'u buldum, ancak istenen davranışla sonuçlanıp sonuçlanmadığından emin değilim.

Yararlı olması durumunda, özellikle Firefox için WebDriver'ı kullanıyoruz.

DÜZENLEME @ AMEY cevabı gereğince

, bu yararlı olabilir:

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

Ancak, örtülü bekleme arzu edilen (get hem geçerli olup olmadığını bana belli değil işlevsellik) ve find_element_by_id.

Çok teşekkürler!

+1

Ben kaynak koduna göz attık bir işlevdir. Python bağlanması için belirsiz. Ancak C# için, 'ImplicitlyWait' sadece FindElement/FindElements' için çalışır (Java için de geçerlidir). Kaynak: [1] (https://code.google.com/p/selenium/source/browse/dotnet/src/WebDriver/ITimeouts.cs#48) [2] (https://code.google.com/ p/selenium/issue/detail? id = 5092) –

+0

Teşekkürler. İlgilendiğinizde cevabımı aşağıya bakın. –

cevap

64

, yüklemek için bir sayfa için bir zaman aşımı oluşturmak için bir yöntemdir: sayfa yükleme fazla 30 saniye sürer her

driver.set_page_load_timeout(30) 

Bu TimeoutException atacağım.

+2

Bu, Chrome sürücüsü ile çalışmaz. – sorin

+1

Daha fazla bilgi edinme veya düzenleme yapmayla ilgileniyor musunuz? –

4

Açık ve örtük beklemeler hakkında bilgi here bulunabilir.

GÜNCELLEME this arasında esaslı Bunu görmek java, içinde

:

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. 

piton eşdeğer emin değilim. python'da

3

iyi yolu ayarlamaktır tercihi:

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

Bir çeşit hata mı veriyor? –

+0

@ivan_bilan: "Exeption" demek istemiyorsanız, hayır, –

+0

'dom.max_script_run_time' döndürmez, javascript'i çalıştırmak için bir zamanaşımı ayarlar. Tam bir pageload zaman aşımı değil. –

1

Çözümümün tarayıcı yük etkinliğin yanında bir asenkron parçacığı çalıştırın ve varsa o tarayıcıyı kapatmak ve yük işlevini yeniden çağırmak için bir zaman aşımı.

#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() 

Çağrı() sadece

İlgili konular