Selenium webdriver Java 查找元素

1.简单查找

By ID: WebElement element=driver.findElement(By.id("userId"));

By Name:WebElement element=driver.findElement(By.name("cheese"));

By TagName:WebElement element=driver.findElement(By.tagName("a"));

By ClassName:WebElement element=driver.findElement(By.className("login"));

By LinkText:WebElement element=driver.findElement(By.linkText("Blog");

这种方式很简单,只需要知道id等等属性值就好。那么问题来了,怎么知道属性值是什么呢?总不至于通过网页源码一个一个查看吧!其实Firefox 有一款很强大的插件,叫 Firebug。它是一款很经典的定位网页元素以及查看网页源码的插件。安装方法是在火狐的附加组件里搜索”Firebug",然后我这边选择的是 “Firebug 2.0.8",安装即可。

2.Xpath

关于Xpath的教程可以参考w3School:http://www.w3school.com.cn/xpath/

为了方便定位以及确认Xpath是否正确,Firefox也有一款插件叫Xpath finder。选择附加组件,然后搜索 Xpath即可看到,我这边的版本是 Xpath finder 1.02,点击安装即可。

Xpath使用路径表达式来选取XML文档中的节点或者节点集。

选取节点

下面列出了最有用的路径表达式:

表达式描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

谓语

谓语用来查找某个特定的节点或者包含某个指定的值得节点。谓语被嵌在[]中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

使用:WebElement element=driver.findElement(By.xpath("//ul[@class='nav logged_out']/li"));

表示首先查找class属性的值为 ”nav logged_out"的ul元素,然后查找到这些ul元素下面的所有li元素。

3.CSS选择器

其实大部分的元素都会有一个ID或者Name,这样通过方法1就可以解决,比较奇葩复杂的也全部可以通过XPath来解决。那么为啥还要用CSS呢?恩,据说是因为CSS是最快的。这个需要点CSS功底。想当初W3C的教程我可是看了好久。

CSS教程:http://www.w3school.com.cn/css/index.asp

使用:List<WebElement> webElements = webdriver.findElements(By.cssSelector("ul.nav li"));

.nav 代表 class="nav"。

#nav 代表 id="nav"。

ul 代表属性为 “ul"。

上面那句话的意思是选择所有class属性值为”nav"的ul下面的li。话说,有点绕啊~~

posted @ 2015-07-11 16:33  微微微笑  阅读(1128)  评论(0编辑  收藏  举报