2

我在 IE 7、8、9 中使用 selenium,由于某种原因,一些 CSS 3 定位器在 IE 7 和 9 中工作,但不是 8。这是定位器的代码:

即 9

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

即 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)(我已经尝试过在选择器之间插入s 之类的东西>,但这没有用)

我正在使用 selenium server 2.23,带有 IEDriverServer 32 位和 python 2.23 API。

4

1 回答 1

2

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

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

于 2012-06-13T15:58:39.393 回答