Используя следующий упрощенный тест, веб-драйверу не удается найти нужный элемент независимо от того, какой вызов find_by я использую.
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 == Email в выводе появляется следующее сообщение об ошибке:
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.
Google подвел меня, кто-нибудь знает, почему IE отказывается определять элементы страницы, которые явно присутствуют?
Техническая информация:
- Windows 7, 64-разрядная
- Селен 2.4.0
- Python 2.7.1
- Internet Explorer 8.0.7601.17514, 64-разрядная
Некоторые дополнительные исследования доказывают, что исходный код страницы полностью загружен и исправлен до попытки find_element. Добавление следующей строки между get (url) и вызовом find_element_by_id печатает источник страницы и присутствует элемент с идентификатором «Email»:
print unicode(br.page_source).encode("utf-8")
Попытка просто print br.page_source вызывает некоторую ошибку кодирования, из-за чего строка печати включает в себя кодировку Unicode. Не уверен, что это так, как ожидалось при работе с IE, или кодировка utf-8 может мешать моим попыткам найти элементы.
Итак, я думаю, что реальный вопрос заключается в следующем: кто-нибудь успешно использовал Python API Webdriver с 64-битным Internet Explorer?