Selenium DOM定位器如何工作?

时间:2012-10-05 08:20:52

标签: javascript dom selenium

我正在尝试理解Selenium DOM定位器的语义。文档声明它们基本上是Javascript表达式,用于获取目标元素。但如果我尝试评估例如document.div[0].button[2](来自these examples),我只会得到Error: TypeError: document.div is undefined

这个例子无效吗?这是一种过时的导航DOM的方式,在现代浏览器中不再支持但是由Selenium模拟以实现向后兼容性吗?有没有关于这种语法如何工作的文档?

请注意,我并不是想使用 DOM定位器 - 我很清楚使用CSS或id甚至XPath更清晰。然而,我需要了解它们的语义,以便我可以编写可以将常见DOM定位器转换为XPath定位器的代码,以便在WebDriver中使用。

2 个答案:

答案 0 :(得分:3)

我将分享我对DOM定位器的理解。有几个DOM缩写:

gEBI - getElementById
gEBTN - getElementsByTagName

在selenium web驱动程序的上下文中使用Xpath定位器和css选择器,并且在javascript的上下文中使用DOM定位器(即,要正确定位具有DOM定位器的元素,您应首先使用JavascriptExecutor包装DOM定位器)

用法示例:

Whole web page         document.documentElement
Whole web page body    document.body
Element <E> by absolute reference     document.body.childNodes[i]...childNodes[j]
Element <E> by relative reference     document.gEBTN('E')[0]   

document.getElementById('TestTable')
First <E> child     document.getEBTN('E')[0]
Last <E> child      document.gEBTN(E)[document.gEBTN(E).length-1]   

Second <E> child              document.getEBTN('E')[1]
Second-to-last <E> child      document.gEBTN(E)[document.gEBTN(E).length-2]
Parent of element <E>         document.gEBTN('E')[0].parentNode   

Descendant <E> of element with id I using specific path   
document.gEBI('I')…gEBTN('E')[0]      

Descendant <E> of element with id I using unspecified path
document.gEBI('I').gEBTN('E')[0]

因此,如果您想要完成这项工作,我们应该调用jsExecutor。这有点像:

JavascriptExecutor js = (JavascriptExecutor) driver;
String script = "return document.getElementById('example');";
WebElement exampleDiv = (WebElement) js.executeScript(script);
exampleDiv.getText(); 

另外,关于你的问题,我找到了一条解释here

希望现在更加清晰了。)

答案 1 :(得分:2)

这里有一些关于Selenium的DOM命令的概述:

http://www.simple-talk.com/dotnet/.net-framework/xpath,-css,-dom-and-selenium-the-rosetta-stone/

它也讨论了很多关于其他选择器的内容,但与它的替代方案相比,它可能有助于查看命令的外观。它给出了一个PDF文件,基本上也是eugene上面谈过的内容。