使用以下簡化測試,無論使用哪種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?
增加隱式等待,甚至高達200,返回相同的結果。該頁面明顯完成加載,但find_element只是找不到該元素。 – Tfill
這適用於IE8,WinXP,Selenium 2.2,Java。我所做的只是WebDriver driver = new InternetExplorerDriver(); driver.get(「http://www.gmail.com」); (「電子郵件」))。sendKeys(「hello」); – nilesh
注意到http在評論中被刪除了... – nilesh