自动化测试中如何使用Xpath定位器
在本教程中,我们主要研究Selenium WebDriver进行自动化测试时如何使用Xpath进行元素定位。主要包括如何创建Xpath定位器,不同类型的Xpath以及使用Xpath查找动态元素的方法。
什么是Xpath
我们可以把Xpath理解为在XML文档中查找不同元素的查询语句。(同样适用于HTML文档的查询) 基本语法格式://标签[@attributeName = 'attributeValues']
例如:
百度文本框的标签为: input
属性及值包括:class = "s_ipt" name = "wd" id = "kw" 等
按照我们上面的语法,这个表达式就可以这么写:
- //input[@class='s_ipt']
- //input[@name = 'wd']
- //input[@id = 'kw'] 当然只要我们使用的属性是唯一的,任何元素都可以用该方式定位到。
不同类型的Xpath
1 . 绝对路径Xpath:指表达式从根节点开始选择,以“/”或根节点开头,遍历整个DOM直到定位的元素。
例如以上百度输入框使用绝对路径: html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input
2 . 相对路径Xpath:表达式以“//”开头,匹配XML文档中任何位置满足查找的元素。
相对路径上面已经给出://input[@id = 'kw']
以上两种方式那种更好呢?显然相对路径的方式更容易让人阅读和创建,而且更健壮。绝对路径的主要问题就是,任何元素的细微变化都会使我们的Xpath表达式无效。
使用Xpath查找动态元素
在实际的UI自动化测试过程中,我们经常会遇见一些没有唯一属性的或者属性相同的元素。对于这样的情况,Xpath提供了不同的方法来定位。比如使用元素上的文本内容,或者使用元素的索引,或者使用部分匹配的属性值,当然也可以通过唯一识别的元素的兄弟,孩子或者父母来定位等等。
使用文本
例如我们要定位百度首页右上角的【新闻】元素 表达式://a[text()='新闻']
使用包含
表达式://div[contains(@id,'sb')]
使用索引
我们这次要定位右上角的【视频】元素 表达式://div[@id='u_sp']/a[4]
使用Xpath轴
- 子关系 表达式语法://div[@id='u_sp']/child::* 表示所有的子节点元素
- 父关系 表达式语法://div[@id='u_sp']/parent::* 表示获取所有的父节点元素
- 兄弟关系 表达式语法: //div[@id='u_sp']/following-sibling::* 表示当前节点后的所有同级节点
有兴趣的同学可以试试,有问题可随时联系我们。QQ群:368872334