在Selenium Webdriver中,页面中的每一个web元素都可以对应到一个WebElement对象。WebElement对象可以通过WebDriver的findElement方法来获得。
findElement方法可以返回一个元素或一个元素列表,这个方法通过定位器By来查找元素。
在元素上点击右键–查看元素,在Firefox自带的HTML查看器中进行查看。
文章目录
1 元素ID
使用ID定位元素是最有效和最推荐的方法。
<element id = "value">
应用
WebElement element = driver.findElement(By.id(“kw”));
2 元素Name
<element name = "value">
应用
WebElement element = driver.findElement(By.name(“wd”));
3 元素Class Name
<element clsss = "value">
应用
WebElement element = driver.findElement(By.className(“s_ipt”));
4 超链接文本
<element href="value">LinkText</element>
应用
WebElement element = driver.findElement(By.linkText(“关于百度”));
5 缺省超链接文本
<element href="value">PartialLinkText</element>
应用
**WebElement element = driver.findElements(By.PartialLinkText(“关于”));
6 元素Tag Name
<tag class='value'> </tag>
应用
webElement element = driver.findElement(By.tagName(“input”));
在页面中通常会有多个同样的tab,在元素定位的过程中,findElement只会返回页面树状结构中自上而下第一个满足条件的元素。
7 XPath
XPath(XML Path Language)XML路径语言。XPath是一种查询语言,用来确定XML文档中某部分位置的语言。
XML(eXtensible Markup Language)可扩展标记语言
HTML(HyperText Markup Language)超文本标记语言
7.1 绝对路径 /
1、选择根元素AAA: /AAA
2、选择AAA的所有CCC子元素: /AAA/CCC
3、选择AAA的子元素DDD的子元素BBB:/AAA/DDD/BBB
7.2 模糊匹配路径 //
1、选择所有BBB元素://BBB
2、选择所有父元素是DDD的BBB元素://DDD/BBB
7.3 父节点 . .
1、选择所有BBB元素的父节点://BBB/. .
首先模糊匹配找到所有BBB节点,接着绝对匹配找到这些BBB节点的父节点
7.4 指定顺序 [?]
1、选择AAA的第二个BBB子元素:/AAA/BBB[2]
不同于编程中数组下标是从0开始的,xpath定位时,下标是从1开始的。
2、选择AAA的最后一个BBB子元素:/AAA/BBB[last()]
7.5 全匹配 *
1、选择所有/AAA/CCC/DDD下的元素:/AAA/CCC/DDD/*
2、选择所有/AAA下的孙节点BBB元素:/AAA/*/BBB/
7.6 元素属性 @
1、选择有id属性的BBB元素://BBB[@id]
2、选择有id="pwd"的BBB元素://BBB[@id=“pwd”]
7.7 文本 Text
1、选择收件人的值是韩梅梅的元素:
/邮件/收件人[1]
//收件人[text()=“韩梅梅”]
7.8 属性模糊匹配 start-with()与contains()
1、选择有id属性且以name开始的元素:
//*[start-with(@id,“name”)]
//*[contains(@id,“name”)]
在火狐浏览器中可以安装Xpath Checker来辅助得到Xpath路径。但是我在火狐的工具中没有找到它,找到了另一个叫Try Xpath的工具,功能也差不多。
例如,通过xpath找到百度首页的搜索输入框,使用Try Xpath检查是否正确。
可以看到 //input[@name=“wd”] 正确定位到了搜索输入框。
//input[@value=“百度一下”]
元素定位总结
- 元素具有ID属性,优先使用ID定位。
- 其次使用name属性,但是需要确定是否唯一。
- 定位链接元素时,考虑使用Link Text。
- 当其他定位方法无法准确定位时,可以使用Xpath定位。
- Xpath是通用的定位方法,但使用时需要注意Xpath语法的稳定性。比如,使用绝对路径和元素属性这两种方式时,使用元素属性更为推荐,因为绝对路径发生变化的可能性较大。