Selenium DOM 定位器的语义如何工作.



我试图理解Selenium DOM定位器的语义。文档指出,它们基本上是Javascript表达式,经过计算以获取目标元素。但是,如果我尝试评估例如document.div[0].button[2](从这些示例中),我只会得到Error: TypeError: document.div is undefined.

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

请注意,我并没有尝试使用 DOM 定位器 - 我很清楚使用 CSS 或 id 甚至 XPath 更干净。但是,我需要了解它们的语义,以便编写代码,将常见的 DOM 定位器转换为 XPath 定位器以在 WebDriver 中使用。

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

gEBI - getElementById
gEBTN - getElementsByTagName

Xpath定位器和css选择器用于selenium Web驱动程序的上下文中,DOM定位器用于javascript的上下文(即 要使用 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(); 

另外关于您的问题,我在这里找到了一条解释

希望现在更清楚一点)

这里有一个关于Selenium中一些DOM命令的很好的概述:

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

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

最新更新