2011-08-16 157 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 ==電子郵件出現在輸出以下錯誤消息:

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) 

嘗試使用find_by_xpath和find_by_css_selector返回到運行同樣的測試相同的結果。當然,相同的示例測試在Firefox中運行沒有問題。

谷歌已經失敗了我,有沒有人有任何見解,爲什麼IE拒絕找到明確存在的頁面元素?

技術信息:

  • 的Windows 7 64位
  • 硒2.4.0
  • 的Python 2.7.1
  • 的Internet Explorer 8.0.7601.17514 64位

一些額外的調查證明,頁面源是完全loade d並在嘗試find_element之前更正。添加和GET(URL)之間以下行find_element_by_id調用打印頁面的源代碼,並用「電子郵件」的ID的元素存在:

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

試圖只是打印br.page_source拋出一些編碼錯誤,這就是爲什麼打印行包括unicode編碼的東西。不知道這是否與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 driver = new InternetExplorerDriver(); driver.get(「http://www.gmail.com」); (「電子郵件」))。sendKeys(「hello」); – nilesh

+0

注意到http在評論中被刪除了... – nilesh

0

這是一個Java示例,但您可以從中學習。

我發現一個很好的故障排除方法是先用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); 
} 

這樣,當其未找到它不會拋出異常。相反,你會得到一個人類可讀的錯誤。

相關問題