Selenium:IE8 CSS定位器

时间:2012-06-12 17:57:55

标签: javascript internet-explorer internet-explorer-8 selenium-webdriver

我正在使用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。

1 个答案:

答案 0 :(得分:2)

正如@ A.J所说,Selenium 2使用浏览器本机CSS选择器(如果可用)。所以在这种情况下,它使用Sizzle for IE 7,以及IE 8和9的原生选择器。显然,IE 8的选择器无法正确处理。

我最终使用的解决方法是通过后代选择器定位正确的ul.tabs,然后使用+选择器和jQuery的next()方法遍历列表。