1. 元素定位的概念
- 自动化测试不仅仅是使用工具来模拟人工操作,它更是一种系统化、高效化的测试方法,旨在通过预设的脚本和工具,自动执行测试流程,减少人为错误,提高测试覆盖率和效率。是一个很好的就业方向,对于初学者来说,我们要入门,面临的第一个难点:元素定位。
- 生活中的元素定位
- 我们平时使用网站时,是手动移动鼠标实现的元素定位,例如:当我们需要使用百度搜索:‘软件测试’时,我们先得把鼠标移动到百度搜索框中,这个操作就是元素定位。
- 在自动化测试中,我们需要使用工具来自动完成这一操作,这就是自动化测试中的元素定位。
2. 元素定位方法
- 常用的元素定位方法有以下八种,总结如下:
- 数据准备(百度搜索框)
-
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
-
- 直接使用元素的属性定位
- id定位
使用举例:
driver.find_element_by_id("kw")
优点:
在html中,元素的id属性是唯一的,因此使用简单、效率高
缺点:
并不是所有的元素都有id属性
有写页面中,id属性是会动态变化(如:163邮箱登录页面中的iframe元素的id属性),此时就不能使用id属性定位
-
动态id属性
-
- name定位
使用举例:
driver.find_element_by_name("wd")
优点:
直接使用name属性定位,操作简单方便
缺点:
在html中,元素的name属性如果有重复,则不建议使用。
检查是否重复的方法://*[@name='name属性值']
-
多个元素的name属性相同
-
- class定位
使用举例:
driver.find_element_by_class_name("s_ipt")
优点:
直接使用class属性定位,操作简单方便
缺点:
在html中,元素的class属性如果有重复,则不建议使用。
在html中,一个元素可能存在多个class属性,此时一定要注意,只能选择其中之一,如:<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn">,在百度按钮这个元素中,class属性值有4个,并用空格分隔的,此时只能选择其中的一个。
-
一个元素有多个class属性值
-
- id定位
- 标签名定位
- 一般不用,页面中,标签名重复的太多了
- 链接文本定位
- Link Text定位(完整链接文本定位)
使用举例:
driver.find_element_by_link_text("超链接文本")
优点:
操作简单方便
缺点:
仅适用于超链接元素(a标签元素)
文本值如果有重复,则不建议使用
- Partial Link Text定位(部分链接文本定位)
使用举例:
driver.find_element_by_link_text("部分超链接文本")
优点:
和Link Text定位,只不过这个方法更加灵活,支持使用部分链接文本来定位元素
缺点:
同Link Text定位
- Link Text定位(完整链接文本定位)
- xpath定位
- 绝对路径定位
介绍:从/html标签开始,一层层查找,直到定位元素
获取方法:打开谷歌浏览器开发者工具,直接复制即可
优点:使用简单,复制即可
缺点:路径很长,这样写的自动化测试脚本稳定性很差,一般不建议使用
谷歌浏览器复制xpath绝对路径 - 相对路径定位
- 也可以通过谷歌浏览器直接复制,但有的情况复制的路径存在问题,需要自己编写,总结如下(下述的方法一般结合起来使用):
-
标签定位
-
一般结合其它方式一起使用:
//span:表示定位页面的中span标签元素
//*:表示页面中的所有标签
-
-
Xpath中使用属性定位元素
-
使用方法:
//标签名[@属性名1='属性值1' and @属性名2='属性值2' ....]
优点:
可以使用元素中的任何一个属性或多个属性定位
缺点:
可能存在多个元素的属性相同,无法定位元素的情况
-
-
-
Xpath中使用索引定位元素
-
使用方法:一般结合其它方案一起使用
//标签名[@属性名1='属性值1'] [1]
使用场景:
当通过其它属性无法唯一定位到元素(即只能定位到一组元素),这时候可以使用索引,选择使用其中的第几个元素
注意事项:
索引是从1开始,而不是从0
-
-
-
Xpath中通过子元素定位父元素
-
使用方法:
//子元素/..
备注: ..表示上一层元素(即父元素)
使用场景:
当子元素比较方便定位,但父元素不方便定位到时,使用这种方法会非常方便快捷
-
-
-
Xpath中通过兄弟元素定位
-
使用方法:
//子元素/../目标元素
备注: ..表示上一层元素(即父元素)
使用场景:
是父元素定位方法的延伸,更加丰富了xpath定位的灵活性
-
-
-
Xpath中通过元素文本内容定位
-
使用方法:
//标签名[text()='文本内容']
使用场景:
xpath中,如果有文本内容,也可以一并使用,以便定位元素。和Link Text定位方式不同,这种方法,适合所有的标签。而Link Text定位方式仅仅限于a标签
-
-
-
特殊用法
-
属性以xxx开头的元素
-
/标签名[starts-with(@属性名,'xxx')]
-
-
属性中包含xxx的元素
-
//*[contains(@属性名,'xxx')]
-
-
-
- 也可以通过谷歌浏览器直接复制,但有的情况复制的路径存在问题,需要自己编写,总结如下(下述的方法一般结合起来使用):
- 绝对路径定位
- CSS选择器定位(未完,待续)