Xpath学习总结(一)

来源:互联网 发布:不表态 知乎 编辑:程序博客网 时间:2024/05/16 01:54

使用WebDriver做Web自动化时要使用Xpath定位页面元素,大概总结了下Xpath相关知识,以备后续学习和使用。


一、基本知识

.  选择当前节点

..  选取当前节点的父节点

@ 选择属性


以//开头:相对路径,表示Xpath引擎从文档中任意符合的元素节点开始进行解析

以/开头:绝对路径,表示Xpath引擎从文档的根节点开始解析,一般不推荐使用绝对路径,因为页面结构改变后之前定义的Xpath就会失效

/出现在xpath路径中: 表示查找父节点的直接子节点

//出现在xpath路径中:表示寻找父节点下任意符合条件的子节点


二、xpath精准查找:

使用id, name, class, className, tagname, label等。优先级:id-->name-->class,例如:

<span style="font-size:18px;">//span[@id='login']//input[@name='textName']//select[@class='dpdroplist']//div[@label='layoutRows']</span>


三、xpaht模糊匹配:

1. contains关键字:

1) 查找页面中href属性包含有Event Log的a元素://a[contains(@href,'Event Log')]@后面可以跟该元素任意属性名

2) 查找页面中id属性包含tableNavBar或者menu的所有元素://*[contains(@id,'tableNavBar' or contains(@id,'menu'))

3) 查找页面中type属性不包含hidden的input元素://input[not(contains(@type,'hidden'))]

4) 查找页面当前节点class属性包含wizardPanelInner的div元素://div[@class[contains(.,'wizardPanelInner')]]

查找页面当前节点包含mainCellTable的div元素://div[contains(.,'mainCellTable')]

2. text关键字

查找文本信息包含Logout的div元素://div[contains(text(),'Logout')]

3. start-with关键字:

寻找label属性以blkList开头的div元素://div[starts-with(@label, 'blkList')]


四、实例:

1. 表格里确定行和列:

确定列: 

<span style="font-size:18px;">//td[@align='left'][./div[@id='searchResultTable' or @id='ChangedRecordPageDiv']]/div[not(contains(@style,'display: none;'))]//table[@class='mainCellTable']//thead[not(@style)]//th[contains(.,'Name')]</span>

确定行:

<span style="font-size:18px;">//td[@align='left'][./div[@id='searchResultTable' or @id='ChangedRecordPageDiv']]/div[not(contains(@style,'display: none;'))]//table[@class='mainCellTable']//tbody//tr[1]</span>

2. 传递参数

<span style="font-size:18px;">String CHECKBOX_LOC="/div[@class='bDiv']//table//tr[@id='sampleDataRow' and contains(., '%s')]//input";driver.findElement(By.xpath(String.format(CHECKBOX_LOC, name.toUppercase()))).click();</span>

参数name.toUppercase()将传递到%s


新手学习,如果有遗漏或者不正确的地方,欢迎阅者指正。

0 0