2

Я использую селен с IE 7,8,9, и по некоторым причинам некоторые IE-3 работают в IE 7 и 9, но не 8. Это код для локаторов:Selenium: IE8 Локаторы CSS

IE 9

tab = driver.find_element_by_css_selector('ul.tabs:nth-of-type(1) li:nth-of-type(%d)' % x)

IE 7

tab = driver.find_element_by_css_selector('ul.tabs:eq(1) li:nth-child(%d)' % x)

, но в IE 8, используя локатор nth-child, or :eq, or nth-of-type, выдается WebDriverException, говорящее, что он не может найти элемент.

Кроме того, приведенный выше код работает в IE 8 через консоль dev, он просто не работает с селеном (предположительно потому, что селен использует Sizzle для селекторов).

Может ли кто-нибудь проинформировать меня о том, почему это не работает в IE 8, или предлагает возможные обходные пути, которые будут работать. (Я пробовал такие вещи, как ul.tabs:eq(1) > li:nth-child(%d) т.е. вставляя > сек между селекторами, но это не сработало)

Я использую селен сервер 2.23, с IEDriverServer 32 бит и питоном 2.23 API.

+1

«по-видимому, потому что селен использует Sizzle для селекторов» - Selenium1 использует sizzle не Webdriver/Selenium2. Webdriver использует селектора css. –

ответ

2

Как сказал А.J., Selenium 2 использует собственные селектора CSS браузеров, если они доступны. Таким образом, в этом случае он использовал Sizzle для IE 7 и собственные селектора для IE 8 и 9. Очевидно, что селектора IE 8 не смогли правильно обрабатывать вещи.

Чтобы обойти эту проблему я в конечном итоге с помощью был целевой правильный ul.tabs потомком селекторов, а затем использовать + селектор и next() метод JQuery для просмотра списка.

Смежные вопросы