SeleniumHQ表示每个驱动程序都支持其浏览器支持的任何CSS选择器。根据{{3}},IE 9应该支持:nth-of-type()选择器。但是,当我在此选择器上执行NullPointerException
时,我似乎从RemoteWebDriver
类的深度获得findElements
。我的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位
答案 0 :(得分:2)
:nth-of-type()
选择器,那么IE驱动程序也应如此。然而,这不是整个故事。如果页面中的DOCTYPE
不是现代标准(例如<!DOCTYPE html>
,那么IE也会尝试猜测它应该如何呈现文档,如果它猜测它应该像以前一样呈现它IE版本,它将使用之前版本的CSS选择器引擎。
由于您使用的是IE9,因此有一种非常简单的方法可以查看WebDriver是否应该能够找到您正在尝试使用的选择器的元素。当您在感兴趣的页面上时,按功能键F12打开“F12 Developer Tools”。转到Developer工具中的Script选项卡,然后键入
document.querySelector('table#ucsp_dgMultiSelect tr:nth-of-type(2) input#cbPres')
如果控制台显示元素信息,那么WebDriver应该能够找到它。如果没有,那么IE无法找到它,WebDriver也不会找到它。
这种调试技术将在您尝试使用IE9中的CSS选择器查找元素时起作用,并且在帮助确定问题是IE还是驱动程序方面非常有用。此外,F12开发人员工具还会告诉您IE正在尝试呈现页面的模式,这也是有益的。