我正在使用selenium和IE 7,8,9,出于某种原因,一些CSS 3定位器在IE 7和9中工作,但不是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, or :eq, or nth-of-type
定位器会产生WebDriverException,表示无法找到该元素。
此外,上面的代码通过开发控制台在IE 8上工作,它只适用于selenium(可能是因为selenium使用Sizzle作为选择器)。
任何人都可以告诉我为什么这不适用于IE 8,或建议可行的解决方法。 (我尝试过像ul.tabs:eq(1) > li:nth-child(%d)
这样的东西,比如在选择器之间插入>
,但这不起作用)
我正在使用selenium server 2.23,IEDriverServer 32位和python 2.23 API。
答案 0 :(得分:2)
正如@ A.J所说,Selenium 2使用浏览器本机CSS选择器(如果可用)。所以在这种情况下,它使用Sizzle for IE 7,以及IE 8和9的原生选择器。显然,IE 8的选择器无法正确处理。
我最终使用的解决方法是通过后代选择器定位正确的ul.tabs
,然后使用+
选择器和jQuery的next()
方法遍历列表。