【问题标题】:WebDriver - Does the ":nth-of-type()" Selector work for IE 9?WebDriver - ":nth-of-type()" 选择器是否适用于 IE 9?
【发布时间】:2012-11-07 03:15:43
【问题描述】:

SeleniumHQ 表示每个驱动程序都支持其浏览器支持的任何 CSS 选择器。根据this site,IE 9 应该支持 :nth-of-type() 选择器。但是,当我在此选择器上执行 findElements 时,我似乎从 RemoteWebDriver 类的深处得到了 NullPointerException。我的By.cssSelector 看起来像这样:

table#ucsp_dgMultiSelect tr:nth-of-type(2) input#cbPres

这在 Chrome 上运行良好。也许 IE 9 将选择器放在中间有问题,我不知道,但这会破坏我的很多代码。 :nth-of-type() 选择器已成为我在表格中识别 WebElement 定位器的首选。有没有其他人成功使用 :nth-of-type() 选择器作为 WebDriver 和 IE 9 的定位器?

我正在使用 IEDriverServer.exe.2.25.2.0,我的 IE 版本是 9.0.8112.16421 64 位

【问题讨论】:

  • 那里似乎有问题。 IE9 确实支持 CSS 中的:nth-of-type()。无论如何,如果您改用:nth-child() 会怎样?对于tr 元素,它们基本相同。
  • 只要你没有一些讨厌的colgroupcaption 没有theadtbody
  • @canon:这仅在 XML 序列化标记中重要,其中标记中的 table > tr 元素不会在 DOM 中分配自己的 tbody。在 HTML 中,tr:nth-child(n)tr:nth-of-type(n) 对于任何 n 总是相同的。
  • @canon: 除非 WebDriver 使用 XML 解析器...
  • 是的,它确实支持它。见quirksmode.org/css/contents.html

标签: css internet-explorer selenium css-selectors webdriver


【解决方案1】:

WebDriver 实际上支持浏览器支持的 CSS 选择器,如果 IE9 支持 :nth-of-type() 选择器,那么 IE 驱动程序也应该支持。然而,这并不是故事的全部。如果您页面中的DOCTYPE 不是现代标准(例如<!DOCTYPE html>,IE 也会尝试猜测它应该如何呈现文档,并且如果它猜测它应该将其呈现为以前的 IE 版本,它'将使用之前版本的 CSS 选择器引擎。

由于您使用的是 IE9,因此有一种非常简单的方法可以查看 WebDriver 是否应该能够使用您尝试使用的选择器找到元素。在您感兴趣的页面上按功能键 F12 打开“F12 开发人员工具”。转到“开发人员工具”中的“脚本”选项卡,然后键入

document.querySelector('table#ucsp_dgMultiSelect tr:nth-of-type(2) input#cbPres')

如果控制台显示元素信息,那么 WebDriver 应该可以找到它。如果没有,那么 IE 就找不到了,WebDriver 也永远不会。

这种调试技术将在您尝试使用 IE9 中的 CSS 选择器查找元素时起作用,并且对于帮助找出问题是 IE 还是驱动程序非常有用。此外,F12 开发者工具还会告诉您 IE 尝试以何种模式呈现页面,这也很有指导意义。

【讨论】:

  • 非常感谢!我公司的网站应该与 IE9 标准兼容,但此页面以及可能的其他页面正在使用 Quirks 模式。如果我在开发人员工具中将文档模式更改为 IE9 标准,querySelector 命令会成功。所以我发现了一个错误,现在可以开始确保我们的站点具有正确的 Doctypes。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 2013-11-23
  • 1970-01-01
  • 2015-12-20
  • 2015-08-31
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多