selenium xpath总结

来源:互联网 发布:西门子数控车床编程 编辑:程序博客网 时间:2024/06/03 17:04

Xpath  语法

1.      XPath 是XML 和Path的缩写,主要用于xml文档中选择文档中节点,XPath语言可以用在整棵树中寻找指定的节点

2.      XPath 定位和CSS定位相比有更大的灵活性。XPath 在文档树中某个节点既可以向前搜索,也可以向后搜索,CSS定位只能在文档树中向前搜索,但XPath的定位速度比CSS 慢

3.      绝对定位方式:   XPath表达式表示从html代码的最外层逐层查找,最后定位到按钮节点,举例:By.xpath(“/html/body/div/input[@value=‘查询’]”)

4.      绝对定位方式好处在于可以验证页面是否发生变化,如果页面发生变化,一般会造成原有定位成功的xpath表达式定位失败,绝对定位十分脆弱,即时页面代码发生了微小的变化也会造成原来的xpath定位失败,自动化测试中推荐使用相对路径定位

5.      相对路径定位:xpath 表达式://input[@value=”查询”]

Java定位语句:By.xpath(“//input[@value=“查询”]”)

//表示在html文档的全部层级进行查找

//input[@value=“查询”] 表示定位value为查询”的按钮

6.      使用索引号进行定位By.xpath(“//input[2]”) 定位第二个div中的查询按钮。页面元素出现新增或者减少的情况,不建议使用索引号定位

XPath表达式同事定位多个页面元素,冰晶定位到的多个元素存储到List对象中  举例:

List<WebElement>  inputs=driver.findElements(By.xpath(“//input[1]”))

7.      页面元素的属性值 定位元素实例

定位测试网页中第一个图片元素

//img[@alt=”div1-img1”]

Java 定位语句

driver.findElement(By.xpath(“//img[@alt=”div1-img1”]”))

8.      1>定位页面中第一张图片://img[@href=’http://www.sogou.com’]

(使用img标签的href属性值)

2>定位第二个div中的第一个input输入框

//div[@name=’div2’]/input[@name=’div2input’]

(使用div 和 input 的name属性)

3>定位第一个div中第一个链接

//div[@id=’div1’]/a[@href=’http://www.sogou.com’]

(使用div 的id属性,a标签的href 属性)

4>定位页面的查询按钮

//input[@type=’buttton’]

(使用type属性值)

9.      模糊的属性值定位元素

适用情况:页面元素的属性值被动态的生成,即每次看到的页面元素的属性值不一样。

1>Starts-with()---//img[starts-with(@alt,’div1’)]

(查找图片alt属性开始位置包含“div1”关键字的页面元素)

2>  Contains()-------  //img[contains(@alt,’gl’)]

(查找图片alt属性包含gl关键字的页面元素)

即使页面元素的属性值发生一定程度的变化,只用具有固定不变的几个关键字,依旧可以使用Contains()函数进行定位

 

10.  使用页面元素的文本来定位元素

Xpath表达式

//a[text()=‘百度搜索’]

表示要查找包含百度搜索的链接页面元素,使用的精确匹配方式

//a[contains(text(),’百度’)]

搜索包含百度两个字的链接页面元素,实现根据部分文字内容进行匹配

//a[contains(text(),’百度’)]/preceding::div

表示包含“百度”两个字的链接页面元素的前面查找div页面元素

使用xpath的轴(Axis)方式可依据在文档树中的元素相对诶之关系定位,先找到一个相对比较好定位的元素,依据它和要定位元素的相对位置进行定位

parent

选取当前节点的父节点

//img[@alt='div2-img2']/parent::div

查找到alt属性为div2-img2的img元素,并基于图片找到其上一级的div元素

 

 

child

选取当前节点的子节点

//div[@id='div1']/child::img

查找id为div1的div标签,基于当前div查找标签为img的子节点

 

 

·                  Ancestor[['ænsestə]

选取当前节点的所有上层节点

//img[@alt='div2-img2']/ancestor::div

查找alt属性为div2-img2的图片,基于当前图片找到其上级的div页面元素

 

 

·                  Descendant [dɪ'send(ə)nt]

选取当前节点所有下层节点

//div[@id='div2']/descendant::img

查找id属性为div2的div元素,在查找其下级所有节点中的img元素

 

 

following

选取当前节点之后显示的所有节点

//div[@id='div1']/following::img

查找到ID属性为div1的div元素,并基于div的位置找到它后面节点中的img元素

 

  following-sibling['sɪblɪŋ]

选取当前节点之后显示的所有的平级节点

//img[@alt='div1-img1']/following-sibling::input

查找到alt属性为div1-img1的img页面元素,并基于img的位置找到后续节点中的input元素

 

 Preceding  [prɪ'siːdɪŋ]

选取当前节点前面所有的节点

//img[@alt='div2-img2']/preceding::div

查找到alt属性为div2-img2的图片页面元素,并基于图片的位置找到它前面节点中的div元素

 

 

preceding-sibling

选取当前节点前面所有平级的节点

//img[@alt='div2-img2']/preceding-sibling::a[1]

查找到alt属性值为div2-img2的图片元素,基于图片位置找到它前面同级节点的第二个链接页面元素

 

 

            

 

 

                        Html

                          

                               

                         Body

 


     Div1                 div2

Input img     button  input   a       img