2016-10-09 7 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

デバッグヘルプ( "**なぜこのコードは動作しないのですか?**")は、問題の内容**に必要な動作、_特定の問題またはerror_および_それを再現するための最短コード**を含める必要があります。 **明確な問題文**のない質問は他の読者には役に立たない。参照:[mcve]。 – JeffC

答えて

0

TimeoutExceptionは、コードに論理的または構文的なエラーがなくても受信できます。 予想される条件が見つからない場合には、

TimeoutExceptionが発生します。

私は助けるために発見したいくつかのもの:

  • が作る、上記のステップからの要素の上にクローム/ Firefoxの開発ツールと右クリックを使用してXPathを分離し、そしてXPathを使用したXPath
  • を表示します選択した条件が正しいことを確認してください。
  • フロントエンドの経験がある方は、CSSセレクタを使用すると、通常、相対的なxpathよりも直観的で分かりやすくなります。
  • のdevのツールのコンソールを開き、作るために$x({{ XPATH_HERE }})を使用して、使用しているセレクタをチェックしてくださいそれは、ダイナミックHTMLの使用Pythonのデバッガ用
  • 有効であり、HTMLは、各期待状態との間で予測された状態であることを確認してください
+0

しかし、問題は私のコードで使用しない場合です。私が要素を見つけることができるまで待ちます。例えば、私のコードtime.sleep(1)で使用する場合、私は要素を見つけることができ、私はTimeoutExceptionを持っていませんでした。私はWebDriverWaitにいくつか問題があると思いますが、私はその問題を理解できません。 – andrew

+0

私はどこに問題があるのか​​考え出したと思います。問題は、テストしているページがAJAXで動作することです。そしてこのリンクhttp://training-course-material.com/training/Test_Automation_with_Selenium_(Python_Track)では、明示的な待ち時間がAJAXで動作しないことがわかりました。 – andrew

関連する問題