100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > UI自动化测试之元素定位

UI自动化测试之元素定位

时间:2021-09-15 02:05:13

相关推荐

UI自动化测试之元素定位

环境:python3.8

更新中~~

一、八大元素定位方法:

1、id

id属性,确保id唯一。

以百度输入框为例,打开Baidu,按F12,点击左上角箭头点击输入框,就能看到对应的HTML源码,<input ..> 标签中的 id就是id属性

代码实现:driver.find_element(By.ID, "kw")

2、XPATH

用得比较多的方法.

F12后再Ctrl+F 输入XPATH值能检索结果是否唯一、是否定位正确

xpath绝对定位:严格按照元素顺序,过于依赖当前页面元素结构,不稳定xpath相对定位:灵活、用法多、建议用,根据元素本身特征查找、不用按特定顺序.包含以下这些方法:

1).属性定位: //标签名[@属性名=属性值]

2).多个属性组合:and or //标签名[@属性名=属性值 and @属性名=属性值]

3).文本定位://标签名[text()="文本"]

百度例子://span[text()="女儿给爸爸洗脚拍照后转身就走"]

4).文本与属性值组合: //标签名[text()="已签到" and @class="tip"]

5).模糊匹配-包含:

//标签名[contains(text(),"文本")]

//标签名[contains(text(),"文本") and @属性值=属性值]

百度例子://span[contains(text(),"女儿给爸爸洗脚拍照后转身就走") and @class="title-content-title"]

6). * (尽量少用) 模糊匹配

//*[text()="签到"]

//span[@*="member"]

//*[@*="member"]

7).层级定位 :

7.1. 通过父或者祖先找子元素(经常用到),通过自己本身的特征无法唯一定位自己的时用层级定位。格式:

//父标签[@id="u1"]//子标签[@name="tj_login"]

这里用双斜杠比较灵活,单斜杠没那么灵活

7.2.轴定位:通过子元素找祖先元素

语法: 已知元素//...//../轴名称::标签名[@属性名=“属性值” and @属性名=“属性值”]//..

4种轴名称:

parent:父元素 -- 通过子找父 (找到子元素再父)

//子标签名[@属性名="属性值"]/parent::父标签[@属性名=“属性值”]

//子标签名[@属性名="属性值"]/parent::父标签*

ancestor: 通过子找祖先元素

//子标签名[@属性名="属性值"]//子元素标签/ancestor::父标签[@属性名=“属性值”]

preceding-sibling: 通过我 找姐姐/哥哥元素(同一父元素,排在你前面的)

//标签名[@属性名="属性值"]//标签/preceding-sibling::标签[@属性名=“属性值”]

following-sibling: 通过哥哥姐姐找弟弟

//标签名[@属性名="属性值"]//标签/following-sibling::标签[@属性名=“属性值”]

3、link_text

超链接文本, a标签之间的文本

<a>文本</a>

4、partial_link_text

部分超链接文本。

5、name

name属性

6、tag_name

指的是 <> 尖括号中的标签名

7、class_name

class属性

8、css_selector

查看源码实现:(by.py)

二、实现

1. 找单个元素 driver.find_element() 结果是字符串

2. 找多个元素driver.find_elements() 结果 是列表, 找到后再根据下标再定位

元素定位没问题,运行脚本仍然报错提示找不到元素原因:

1、元素在iframe中,这个时候要switch_to.frame,切换iframe

2、添加了智能等待, 还是提示找不到元素。driver.implicitly_wait()

这个时候加个硬性等待即可。 time.sleep(1)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。