2011-08-16 10 views
0

次の単純化されたテストを使用して、私が使用するfind_by呼び出しの種類に関係なく、webdriverが目的の要素を見つけることができません。暗黙の待ち時間の後WebdriverがIE8の要素を見つけられません

import unittest 
from selenium import webdriver 

class Setups(unittest.TestCase): 
    def setUp(self): 
     self.browser = webdriver.Ie() 
     self.browser.implicitly_wait(15) 

    def tearDown(self): 
     self.browser.quit() 

class IETest(Setups): 
    def test_ietest(self): 
     br = self.browser 
     br.get("http://www.gmail.com") 
     br.find_element_by_id("Email").send_keys("anything") 

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

idを持つ要素を見つけることを試みて==次のエラーメッセージが出力に表示される電子メール:find_by_xpathとfind_by_css_selectorリターンを使用して同じテストを実行するための

test_ietest (__main__.IETest) ... ERROR 

====================================================================== 
ERROR: test_ietest (__main__.IETest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "V:\Automation\Tests\web_ietest.py", line 23, in test_ietest 
    br.find_element_by_id("Email").send_keys("anything") 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", l 
ine 172, in find_element_by_id 
    return self.find_element(by=By.ID, value=id_) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", l 
ine 525, in find_element 
    {'using': by, 'value': value})['value'] 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", l 
ine 144, in execute 
    self.error_handler.check_response(response) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py" 
, line 118, in check_response 
    raise exception_class(message, screen, stacktrace) 
NoSuchElementException: Message: u'Unable to find element with id == Email' 

---------------------------------------------------------------------- 
Ran 1 test in 19.707s 

FAILED (errors=1) 

試みを同じ結果。もちろん、同じサンプルテストはFirefoxでは問題なく実行されます。

Googleが私に失敗しました。なぜIEが明らかに存在するページ要素を見つけられないのかについての洞察はありますか?

技術情報:

  • Windows 7の64ビット
  • セレン2.4.0
  • のPython 2.7.1
  • のInternet Explorer 8.0.7601.17514 64ビット

追加の調査では、ページソースが完全にロードされていることがわかりますdとfind_elementが試行される前に修正してください。 GET(URL)との間に次の行find_element_by_idコールを印刷ページのソースと、「電子メール」のidを持つ要素を追加すると、存在している:

print unicode(br.page_source).encode("utf-8") 

はちょうど印刷br.page_sourceしよういくつかのエンコーディングエラーを投げます。なぜなら、プリント行には、ユニコードエンコーディングが含まれているからです。 IEで作業しているときや、utf-8のエンコーディングが要素を見つけようとするのを妨げているかどうかは不明です。


だから、私は、本当の問題はこれです推測:誰もが成功した64ビットのInternet ExplorerとwebdriverをPythonのAPIを使用していますか?

答えて

2

IE8でこの問題を解決できませんでした。

IE9をインストールした後、期待通りに要素を見つけることができました。

0

暗黙的に待機タイムアウトを増やしてみましたか?

+0

暗黙の待機を200まで増やしても、同じ結果が返されます。ページは明らかに読み込みを終了しますが、find_elementは要素の位置を特定しません。 – Tfill

+0

これはIE8、WinXP、Selenium 2.2、Javaの私のために働く。私がやっているのは、WebDriverドライバ=新しいInternetExplorerDriver(); driver.get( "http://www.gmail.com")です。 \t \t \t driver.findElement(By.id( "Email"))。sendKeys( "hello"); – nilesh

+0

httpがコメント内で削除されていることをお知らせします。 – nilesh

0

これはJavaの例ですが、そこから学ぶことができます。

私は良いトラブルシューティングの技術が最初にこの1のようなexceptionlessコールを使用することを見つける:

Set<WebElement> found = driver.findElements(By.cssSelector("some selector")); 

次に、このようfindElementの操作を行います。そのが見つからない場合は、

if (found.size() == 0) { 
    Assert.assertTrue("Found zero x", found.size() == 1); 
} else if (found.size() == 1) { 
    WebElement x = found.iterable().next(); 
} else { 
    Assert.assertTrue("Error looking for x", found.size() >= 1); 
} 

この道を例外をスローしません。代わりに、人間が読めるエラーが発生します。

関連する問題