2016-10-09 109 views
-2

我試着去了解哪裏是在代碼中的問題:webdriver的超時異常

class WebTest(unittest.TestCase): 

@classmethod 
def setUpClass(cls): 
    binary = FirefoxBinary('/home/andrew/Downloads/firefox 45/firefox') 
    cls.browser = webdriver.Firefox(firefox_binary=binary) 
    cls.wait = WebDriverWait(cls.browser, 10) 
    cls.browser.maximize_window() 
    cls.browser.get('http://www.test.com/') 

def test_login_menu_elements(self): 
    self.wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@id='menu_min']"))).click() 
    check_icons(self) 
    self.wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@id='menu_min']"))).click() 
    check_fields(self) 

def test_add_news(self): 
    self.wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(.,'News')]"))).click() 
    self.wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@href='/manager/news']"))).click()  

@classmethod 
def tearDownClass(cls): 
    cls.browser.quit() 

if __name__=='__main__': 
    unittest.main() 

每次我收到TimeoutException異常,我真的不明白爲什麼,哪裏是在代碼中的問題

+1

您可以發佈堆棧跟蹤和可用於重現異常的HTML的最低示例嗎? – dm03514

+0

尋求調試幫助的問題(「**爲什麼不是這個代碼工作?」)必須包含所需的行爲,_specific問題或錯誤_和__必須的最短代碼_在問題本身**中重現**。沒有**明確問題陳述**的問題對其他讀者沒有用處。請參閱:[mcve]。 – JeffC

回答

0

可以接收到A TimeoutException,而不會在代碼中出現任何邏輯或合成錯誤。

TimeoutException當未找到wait.until預期條件時,將會引發s。

我已經找到了幫助一些東西:

  • 使用元素鉻/ Firefox的開發工具,並右擊隔離XPath和顯示的XPath
  • 使用來自上述步驟中的XPath,使確保條件選擇正確
  • ime有前端經驗,使用css選擇器通常比相對xpath更直觀,更容易理解。
  • 通過開放開發工具控制檯並使用$x({{ XPATH_HERE }})使檢查你使用的是選擇相信這是動態的HTML使用Python調試有效
  • ,並確保HTML是在期望的狀態每個預期狀態之間
+0

但問題是如果我不使用我的代碼,wait.until我可以找到元素。例如,如果我在我的代碼中使用time.sleep(1),我可以找到該元素,並且沒有TimeoutException。我認爲我在WebDriverWait上遇到了一些問題,我不明白問題所在。 – andrew

+0

我想我創立了問題的地方。問題是,我測試的頁面與AJAX一起工作。在這個鏈接http://training-course-material.com/training/Test_Automation_with_Selenium_(Pthon_Track)我看到顯式等待不適用於AJAX。 – andrew