2015-12-09 33 views
2

在硒doc中我們可以看到,我們必須設置一些等待超時。 例如:代碼從文檔硒的等待總是需要超時嗎?(Python)

wait = WebDriverWait(driver, 10) 
element = wait.until(EC.element_to_be_clickable((By.ID,'someid'))) 

我不知道我們總是必須設置一些超時?或者有一些方法會一直等到所有的AJAX代碼都會下載,並且只有在我們的驅動程序會與一些網絡元素(我的意思是沒有任何固定超時,它只是加載所有東西並且只在它開始交互之後)之後纔會下載?

+0

你的意思就像一個聽衆?知道ajax響應何時到達? – drkthng

+0

@drkthng是的,像這樣的 – Mikhah

回答

0

希望這段代碼能幫助你。這就是我解決這個問題的方法。

#Check with jQuery if it has any outstanding ajax 
    def ajax_complete(self): 
     try: 
      return 0 == self.execute_script("return jQuery.active") 
     except: 
      pass 
    #Create a method to wait for ajax to complete 
    driver.wait_for_ajax = lambda: WebDriverWait(driver, 10).until(ajax_complete, "") 
    driver.implicitly_wait(30) 
+0

這個腳本看起來很有趣,但是我們仍然有一些嚴格的超時('lambda:WebDriverWait(driver,10)')和'driver.implicitly_wait(30)'。但是我們可以寫我們的代碼嗎?那些「10」,「30」等? – Mikhah

+0

理論上你可以將該值設置得很高,並且有一個很長的超時,你永遠不會打。 –

+0

好吧,這是顯而易見的)但也許有人知道一種不同的方法(如果這樣確實存在) – Mikhah