UI测试:获取相对XPath路径解决动态元素定位问题
动态元素:获取相对XPath值
动态元素
在UI测试过程用,很多元素都没有定义唯一属性,并且XPath值也包含动态部分。如:
此页面中【工作空间】元素的xpath值就是动态的:
//*[@id=“aa36172b-3518-4159-7de3-54345fb4f5bd”]/div[2]/ul/li[1]/ul/li[2],
类似这样的元素,我们在做UI测试的时候,就不能使用XPath属性来定位,并且该元素又没有定义,其他的属性来鉴别唯一性,这时我们在做UI测试就需要使用XPath的相对路径来解决。
获取动态元素的相对XPath
1、单一属性查询定位元素
使用XPath查询方法,通过元素显示的“名称”判断能否确定该元素。
在查询框中输入://li[contains(text(),“工作空间”) ]
结果:显示2个元素,
2、多条件查询定位元素
因为查找结果是2个元素,所以在UI测试脚本中,还是无法使用,此时需要再添加一些属性确定元素的唯一性。把元素的【role】属性加入到查询条件中:
//li[contains(text(),“工作空间”) and @role=“menuitem”],再次查询
MeterSphere UI测试
1、脚本设置
工作空间元素,元素定位类型选择“xpath”,路径为://li[contains(text(),“工作空间”) and @role=“menuitem”]
2、UI执行
执行结果:全部成功
查看特殊节点【工作空间】
查看执行结果当前截屏,正确定位工作空间菜单,并打开工作空间页面
三、XPath查询元素方法
1、直接查找
1.1、 /html/body/div[1] 获取body中,第一个div节点
1.2 /html/body/div[last()-1] 获取body 中,倒数第二个div节点
1.3 //html/body/div[last()] 获取body 中,最后一个div节点
1.4 /html/body/div[@id=“app”] 获取body 中,id属性值为app的div节点
2、带函数查找
2.1 包含:contains
div & li 节点:text属性定位
//li[contains(text(),“工作空间”)] :选取text值包含"工作空间"的li节点
//div[contains(text(),“工作空间”)] :选取text值包含"工作空间"的div节点**
div & li 节点:id&其他 属性定位
//li[contains(@role,“men”)]:选取role属性包含‘men’的li节点
//div[contains(@id,“app”)] :选取role属性包含‘men’的div节点
2.2 starts-with
//div[starts-with(@id,“mi”)] 选取id值以mi开头的div节点
//li[starts-with(@role,“me”)] 选取role值以me开头的li节点
2.3 and
//li[contains(text(),“工作空间”) and @role=“menuitem”] : 选取text 值包含“工作空间”,并且role属性等于 “menuitem”值的li元素
2.4 text ()
//li[contains(text(),“工作空间”)] : 选取text 值包含“工作空间”值的li元素。
3、复杂节点定位
通过子节点定位父节点的兄弟节点
这样的节点一般是出现在表格列表选择框的定位。比如在查询结果列表中,第一列为选择框切需要把信息ID传给下个操作/页面。
动态定位指定记录的选择框,可以先从上图右侧展示的,从1-2-3-4依次顺序,就能定位到指定记录的选择框。即:通过子节点找到父节点,再从父节点找到他前面的兄弟节点,然后再从这个兄弟节点定位他的子节点“选择框”。
xpath:
//label[text()=“THAR202422010000000199”]/parent::td/preceding-sibling::td/input