当前位置: 首页 > news >正文

一、UI自动化测试01--认识和元素定位方法

目录

  • 一、自动化测试
    • 1. 自动化应用场景
    • 2. ⾃动化测试的优缺点
    • 3. ⾃动化测试的分类
  • 二、UI ⾃动测试
    • 1. 适合使用的项目
    • 2. 实现时机
    • 3. 常⻅的UI⾃动化测试⼯具
    • 4. Selenium 框架
    • 5. Web ⾃动化环境部署
    • 6. Web ⾃动化基本代码
  • 二、元素定位
    • 1. 浏览器开发者⼯具
      • ⽅法1: 直接获取信息
      • ⽅法 2: 启动开发者⼯具再获取信息
    • 2. 元素定位⽅法
      • 2.1 id ⽅法
      • 2.2 name ⽅法
      • 扩展: 确定元素定位特征值唯⼀性的⽅法
      • 2.3 class_name ⽅法
      • 2.4 tag_name ⽅法
      • 2.5 定位超链接元素⽅法

一、自动化测试

  • 说明: 利⽤[⼯具]或[代码]替代⼈⼯完成对软件项⽬的[测试过程]

1. 自动化应用场景

    1. 回归测试: 重复性⾼/执⾏频率⾼
    1. 压⼒测试: 多⽤户/⼿⼯测试不好实现
    1. 兼容性测试: 测试条件多/⼿⼯执⾏效率差
  • ⾃动化测试的作⽤: 提⾼测试效率, 保证软件产品质量

2. ⾃动化测试的优缺点

  • 优点:
      1. 较少的时间内运⾏更多的测试⽤例;
      1. ⾃动化脚本可重复运⾏;
      1. 减少⼈为的错误;
      1. 克服⼿⼯测试的局限性;
  • 缺点:
      1. ⾃动化测试可以完全替代⼿⼯测试: ⾃动化测试实现步骤要依赖⼿⼯实现
      1. ⾃动化测试⼀定⽐⼿⼯测试厉害: 只是存在⾼薪和⼊⻔⻔槛的原因导致的
      1. ⾃动化测试可以发掘更多的BUG: UI 界⾯布局⼀类的问题, ⾃动化测试⽆法解决
      1. ⾃动化测试适⽤于所有功能: 功能测试逻辑复杂的/涉及第三⽅交互的都不适合使⽤⾃动化测试实现

3. ⾃动化测试的分类

  1. 接⼝⾃动化
  2. 性能⾃动化
  3. UI ⾃动化(Web 项⽬/APP 项⽬)
  4. 单元测试⾃动化

二、UI ⾃动测试

  • 说明: 通过[代码]或[⼯具]对软件项⽬的[界⾯]进⾏的测试过程
  • 分类: Web ⾃动化和 APP ⾃动化

1. 适合使用的项目

    1. 需求需要稳定不能频繁变更
    1. 项⽬开发周期⻓
    1. 需要频繁实现回归测试(UI ⾃动化最⼤的应⽤场景)

2. 实现时机

    1. 功能测试结束
    1. 可以与功能测试同步实现:
    • 1> 公司具备⾃动化测试组
    • 2> 部署⾃动化测试环境/分析需求/编写⾃动化测试⽤例

3. 常⻅的UI⾃动化测试⼯具

    1. QTP: QTP是⼀个商业化的功能测试⼯具,收费,⽀持web,桌⾯⾃动化测试。
    1. Selenium : Selenium是⼀个开源的web⾃动化测试⼯具,免费,主要做功能测试。
    1. Robot framework : Robot Framework是⼀个基于Python可扩展地关键字驱动的测试⾃动化框架。

4. Selenium 框架

  • 说明: Selenium 是⼀个⽤于 Web 应⽤程序的⾃动化测试⼯具
  • 特点:
    • 1> 开源: 可以根据需求进⾏⼆次开发
      -2> 跨平台: Windows/macOS/Linux 都可以使⽤
    • 3> ⽀持多语⾔: Python/Java
    • 4> ⽀持常⻅的浏览器: ⾕歌浏览器/⽕狐浏览器/IE 浏览器/欧朋浏览器/Safari 浏览器

5. Web ⾃动化环境部署

  1. Python 开发环境: Python 解释器/Python IDE(PyCharm)
  2. 安装 Selenium 包: 使⽤ pip ⼯具
  3. 安装浏览器: 推荐使⽤⾕歌/⽕狐浏览器(兼容性好), Web ⾃动化不针对浏览器类型
  4. 安装浏览器驱动: 保证能够⽤程序驱动浏览器,实现⾃动化测试(需要对应浏览器品牌和版本)
  • 详细步骤参考 selenium安装-注意全程联网操作

6. Web ⾃动化基本代码

# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象: 类名()
driver = webdriver.Chrome() # ⾕歌浏览器
# driver = webdriver.Firefox() # ⽕狐浏览器# 3. 打开⽹⻚: 必须包含协议头
driver.get('http://www.baidu.com')# 4. 观察效果
sleep(3)# 5. 关闭⻚⾯
driver.quit()

二、元素定位

  • 说明: 计算机⽆法向⼈⼀样, 所⻅即所得, 因此需要通过⻚⾯内元素对应的代码中的相关特征来定位及操作元素
  • 特征: 标签名/属性和属性值

在这里插入图片描述

1. 浏览器开发者⼯具

  • 说明: 获取⽬标元素在⻚⾯内代码的相关信息的时候使⽤
  • 注意: 此处以⾕歌浏览器为例, ⽕狐浏览器操作步骤类似

⽅法1: 直接获取信息

在这里插入图片描述

⽅法 2: 启动开发者⼯具再获取信息

  • 启动开发者⼯具

在这里插入图片描述

  • 点选元素获取信息

在这里插入图片描述

2. 元素定位⽅法

  • 说明: Selenium 框架中⼀共提供了⼋⼤类元素定位⽅法, 只有能够定位⽬标元素, 使⽤哪⼀种⽅法没有任何限制!
  • 注意: 当⻚⾯内有多个元素的特征值是相同的时候, 定位元素的⽅法执⾏时, 默认只会获取第⼀个符合要求的特征对应的元素. 因此, 定位元素时需要尽量保证使⽤的特征值能够代表⽬标元素在当前⻚⾯内的唯⼀性!

2.1 id ⽅法

  • 需求:打开注册A.html⻚⾯,完成以下操作
  • id ⽅法: 通过⽬标元素的 id 属性值定位, 由于 id 值⼀般是唯⼀的,
  • 因此当元素存在 id 属性值时, 优先使⽤ id ⽅法定位元素
# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象
driver = webdriver.Chrome()# 3. 打开⽹⻚
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 1).使⽤id定位,输⼊⽤户名:admin
username = driver.find_element_by_id('userA')
# 输⼊⽅法: 元素对象.send_keys('内容')
username.send_keys('admin')# 2).使⽤id定位,输⼊密码:123456
password = driver.find_element_by_id('passwordA')
password.send_keys('123456')# 3).3秒后关闭浏览器窗⼝# 4. 展示效果
sleep(3)# 5. 关闭⻚⾯
driver.quit()

2.2 name ⽅法

  • 需求:打开注册A.html⻚⾯,完成以下操作
  • name ⽅法:由于元素的 name 属性值可能存在重复, 必须确定其能够代表⽬标元素唯⼀性之后, ⽅可使⽤
  • 注意: 当⻚⾯内有多个元素的特征值是相同的时候, 定位元素的⽅法执⾏时,
  • 默认只会获取第⼀个符合要求的特征对应的元素
  • 因此, 定位元素时需要尽量保证使⽤的特征值能够代表⽬标元素在当前⻚⾯内的唯⼀性!
# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象: 类名()
driver = webdriver.Chrome() # ⾕歌浏览器# 3. 打开⽹⻚: 必须包含协议头
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 1).使⽤name定位⽤户名,输⼊:admin
username = driver.find_element_by_name('AAA')
username.send_keys('admin')# 2).使⽤name定位密码,输⼊:123456
password = driver.find_element_by_name('AAA')
password.send_keys('123456')# 3).3秒后关闭浏览器窗⼝# 4. 观察效果
sleep(3)# 5. 关闭⻚⾯
driver.quit()

扩展: 确定元素定位特征值唯⼀性的⽅法

在这里插入图片描述

2.3 class_name ⽅法

  • 需求:打开注册A.html⻚⾯,完成以下操作
  • class_name ⽅法: 由于元素的 class 属性值可能存在重复, 必须确定其能够代表⽬标元素唯⼀性之后, ⽅可使⽤
  • 注意
      1. ⽅法名是 class_name, 但要找元素的 class 属性值
      1. 如果元素的 class 属性值存在多个值, 在 class_name ⽅法使⽤时, 只能使⽤其中的任意⼀个
# 1. 导⼊模块
from time import sleep
from selenium import webdriver# 2. 实例化浏览器对象: 类名()
driver = webdriver.Chrome() # ⾕歌浏览器# 3. 打开⽹⻚: 必须包含协议头
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 1).通过class_name定位电话号码A,并输⼊:18611111111
tel = driver.find_element_by_class_name('telA')
tel.send_keys('18611111111')# 2).通过class_name定位电⼦邮箱A,并输⼊:123@qq.com
# mail = driver.find_element_by_class_name('emailA dzyxA') # 错误样例
# mail = driver.find_element_by_class_name('emailA') # 正确样例
mail = driver.find_element_by_class_name('dzyxA') # 正确样例
mail.send_keys('123@qq.com')# 3).3秒后关闭浏览器窗⼝# 4. 观察效果
sleep(3)# 5. 关闭⻚⾯
driver.quit()

2.4 tag_name ⽅法

  • 需求:打开注册A.html⻚⾯,完成以下操作
  • tag_name ⽅法: 由于⻚⾯内可能存在⼤量重复的标签名, 因此必须确定其能够代表⽬标元素唯⼀性之后, ⽅可使⽤
  • 注意: 由于标签名的重复性过⾼, ⼀般做精确定位时, 都不会选择 tag_name ⽅法
# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象: 类名()
driver = webdriver.Chrome() # ⾕歌浏览器# 3. 打开⽹⻚: 必须包含协议头
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 1).使⽤tag_name定位⽤户名输⼊框,并输⼊:admin
# username = driver.find_element_by_tag_name('input')
# username.send_keys('admin')
# 说明: 如果⽬标元素对象在后续的代码中只使⽤⼀次, 也可以直接在定位元素结束后, 直接调⽤输⼊⽅法实现操作
driver.find_element_by_tag_name('input').send_keys('admin')
# 以下为错误样例: 不能使⽤对象变量接收元素操作⽅法的结果!!!!!!
element = driver.find_element_by_tag_name('input').send_keys('admin')
print(element)# 2).3秒后关闭浏览器窗⼝# 4. 观察效果
sleep(3)# 5. 关闭⻚⾯
driver.quit()

2.5 定位超链接元素⽅法

  • 需求:打开注册A.html⻚⾯,完成以下操作

  • 1).使⽤link_text定位(访问 新浪 ⽹站)超链接,并点击

  • link_text ⽅法: 该⽅法只针对超链接元素(a 标签), 并且需要输⼊超链接的全部⽂本信息

  • 点击⽅法: 元素对象.click()

    • driver.find_element_by_link_text(‘访问 新浪 ⽹站’).click()
  • partial_link_text ⽅法: 该⽅法只针对超链接元素(a 标签), 并且只需要输⼊超链接的部分⽂本信息

    • driver.find_element_by_partial_link_text(‘访问’).click()
  • 注意: 虽然是只传⼊部分⽂本信息, 但是需要确定其唯⼀性, ⽅可以使⽤

# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象: 类名()
driver = webdriver.Chrome() # ⾕歌浏览器# 3. 打开⽹⻚: 必须包含协议头
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')driver.find_element_by_partial_link_text('新浪').click()# 2).3秒后关闭浏览器窗⼝# 4. 观察效果
sleep(3)# 5. 关闭⻚⾯
driver.quit()

相关文章:

  • 如何在学习通快速输入答案(网页版),其他学习平台通用,手机上快速粘贴
  • Redis为什么不直接使用C语言中的字符串?
  • 在应用运维过程中,业务数据修改的证据留存和数据留存
  • Spring Boot 参考文档导航手册
  • BT169-ASEMI无人机专用功率器件BT169
  • JVM运行机制全景图:从源码到执行的全过程
  • 记录前端vue3封装一个modal弹框
  • swagger快速入门
  • css word
  • 微信小程序 - 获取当前地址经纬度
  • 解释PyTorch中的广播机制
  • 使用命令关闭Redis服务端
  • 微信小程序核心技术栈
  • 【前后端分离项目】Vue+Springboot+MySQL
  • k8s中资源的介绍及标准资源namespaces实践
  • P1036-法1.dfs组合 法2.combinations( )
  • springboot入门-service层构造器注入原理
  • 数据库设置外键的作用
  • CMCC RAX3000M CH EC 算力版刷机(中国移动 RAX3000M 算力版)刷机
  • 汉诺塔用python编写
  • 学校食堂饭菜有蛆?举报人遭值班人员辱骂?四川苍溪县教育局回应
  • 百岁太极拳大师、陈氏太极拳第十一代嫡宗传人陈全忠逝世
  • 马上评|演唱会云集,上海如何把“流量”变“留量”
  • 学大教育:去年净利润1.797亿元,学习中心增加约60所
  • 俄方证实俄总统普京正在会见美特使威特科夫
  • 巴基斯坦最近“比较烦”:遣返阿富汗人或致地区局势更加动荡