Webdriver не может найти элементы в IE8 - PullRequest
0 голосов
/ 17 августа 2011

Используя следующий упрощенный тест, веб-драйверу не удается найти нужный элемент независимо от того, какой вызов 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?

Ответы [ 3 ]

2 голосов
/ 06 декабря 2011

Мне никогда не удавалось решить эту проблему в IE8.

Однако после установки IE9 элементы можно было найти как положено.

0 голосов
/ 15 февраля 2013

Это пример Java, но вы можете поучиться на нем.

Я считаю, что хороший метод устранения неполадок - это сначала использовать исключительный вызов, подобный этому:

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

Затем,do 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 );
}

Таким образом, когда он не найден, он не выдает исключение.Вместо этого вы получаете понятную человеку ошибку.

0 голосов
/ 17 августа 2011

Вы пытались увеличить время ожидания неявного ожидания?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...