我在 IE 7、8、9 中使用 selenium,由于某种原因,一些 CSS 3 定位器可以在 IE 7 和 9 中工作,但不能在 IE 8 中工作。这是定位器的代码:
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、或 :eq 或 nth-of-type
定位器会产生 WebDriverException,表示找不到该元素。
此外,上面的代码可以通过开发控制台在 IE 8 上运行,但它不适用于 selenium(大概是因为 selenium 使用 Sizzle 作为选择器)。
任何人都可以告诉我为什么这在 IE 8 上不起作用,或者建议可行的解决方法。 (我尝试过类似 ul.tabs:eq(1) > li:nth-child(%d)
的东西,即在选择器之间插入 >
,但这并没有不起作用)
我使用的是 selenium 服务器 2.23,带有 IEDriverServer 32 位和 python 2.23 API。
最佳答案
正如 @A.J 所说,Selenium 2 使用浏览器 native CSS 选择器(如果可用)。因此,在本例中,它对 IE 7 使用 Sizzle,对 IE 8 和 9 使用 native 选择器。显然,IE 8 的选择器无法正确处理问题。
我最终使用的解决方法是通过后代选择器定位正确的ul.tabs
,然后使用+
选择器和jQuery的next()
遍历列表的方法。
关于javascript - Selenium : IE8 CSS locators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11002162/