写点什么

软件测试 / 测试开发丨学习笔记之 Web 自动化测试

作者:测试人
  • 2023-05-28
    北京
  • 本文字数:2351 字

    阅读完需:约 8 分钟

获取更多相关知识

本文为霍格沃兹测试开发学社学员学习笔记分享,文末附原文链接


Web 自动化的价值和体系

1、什么时候可以做 UI 自动化测试

  • 业务流程不频繁改动

  • UI 元素不频繁改动

  • 需要频繁回归的场景

  • 核心场景等

2、 Web 自动化测试相关技术

  • Selenium:支持多语言,行业内最火最主流

  • Pytest/JUnit5:最好用最全面的单元测试框架

  • Allure:测试报告

Selenium 简介

  • 用于 web 浏览器测试的工具

  • 支持的浏览器包括 IE,Firefox,Safari,Chrome,Edge 等

  • 使用简单,可使用 Java,Python 等多种语言编写用例脚本

  • 主要由三个工具构成:WebDriver、IDE、Grid

Selenium 环境配置步骤

  1. 准备好 Python/Java 环境

  2. 准备好 selenium 依赖

  3. driver 的下载与配置(Mac 与 Windows 不同)

  4. 在代码中 import 对应的依赖

自动化测试用例结构分析

  • 用例标题

  • 前提条件

  • 用例步骤

  • 预期结果

  • 实际结果

web 浏览器控制

  • get 方法打开浏览器*

from selenium import webdriverimport time
def window_start(): # 实例化chromedriver driver = webdriver.Chrome() # 打开网站 driver.get('http://www.ceshiren.com') # 等待一秒 time.sleep(1)
if __name__ == '__main__': window_start()
复制代码
  • refresh 方法刷新页面

from selenium import webdriverimport time
def window_refresh(): # 实例化chromedriver driver = webdriver.Chrome() # 打开网站 driver.get('http://www.ceshiren.com') # 等待一秒 time.sleep(1) # 刷新网页 driver.refresh() # 等待一秒 time.sleep(1)
if __name__ == '__main__': window_refresh()
复制代码
  • 用 back 方法回退到上一个界面

from selenium import webdriverimport timefrom selenium.webdriver.common.by import By
def window_back(): # 实例化chromedriver driver = webdriver.Chrome() # 打开网站 driver.get('http://www.ceshiren.com') # 等待一秒 time.sleep(1) driver.find_element(By.XPATH,"//*[@id='ember35']").click() # 等待一秒 time.sleep(1) # 返回上一个界面 driver.back() # 等待一秒 time.sleep(1)
if __name__ == '__main__': window_back()
复制代码
  • maximize_window 方法使窗口最大化

def max_window():    # 实例化chromedriver    driver = webdriver.Chrome()    # 打开网站    driver.get('http://www.ceshiren.com')    # 等待一秒    time.sleep(1)    # 屏幕最大化    driver.maximize_window()    # 等待一秒    time.sleep(1)
if __name__ == '__main__': max_window()
复制代码
  • minimize_window 方法使窗口最小化

from selenium import webdriverimport time
def min_window(): # 实例化chromedriver driver = webdriver.Chrome() # 打开网站 driver.get('http://www.ceshiren.com') # 等待一秒 time.sleep(1) # 屏幕最小化 driver.minimize_window() # 等待一秒 time.sleep(1)
if __name__ == '__main__': min_window()
复制代码

常见控件定位方法

class name class 属性对应的值 css selector(重点)css 表达式 id(重点) id 属性对应的值 name(重点) name 属性对应的值 link text 查找其可见文本与搜索值匹配的锚元素 partial link text 查找其可见文本包含搜索值的锚元素。如果多个元素匹配,则只会选择第一个元素。 tag name 标签名称 xpath(重点) xpath 表达式

selenium 常用定位方式

#格式: driver.find_element_by_定位方式(定位元素)driver.find_element(By.定位方式, 定位元素)
复制代码

强制等待与隐式等待 1、强制等待

  • 强制等待,线程休眠一定时间

  • time.sleep(3)

from selenium import webdriverfrom selenium.webdriver.common.by import By
def wait_sleep(): """ 如果直接执行,不添加任何等待,可能会报错 """ driver = webdriver.Chrome() driver.get("https://vip.ceshiren.com/") # 添加等待,让页面渲染完成 time.sleep(3) driver.find_element(By.XPATH, "//*[text()='个人中心']")
if __name__ == '__main__': wait_sleep()
复制代码

2、隐式等待

  • 原理:设置一个等待时间,轮询查找(默认 0.5 秒)元素是否出现,如果没出现就抛出异常

#设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常driver.implicitly_wait(3)
复制代码

隐式等待无法解决的问题

  • 元素可以找到,使用点击等操作,出现报错

  • 原因: 页面元素加载是异步加载过程,通常 html 会先加载完成,js、css 其后 元素存在与否是由 HTML 决定,元素的交互是由 css 或者 js 决定 隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的交互

  • 解决方案:使用显式等待

常见控件交互方法

点击,输入,清空

  • 点击百度搜索框

  • 输入”霍格沃兹测试开发”

  • 清空搜索框中信息

# 点击百度搜索框driver.find_element(By.ID,"kw").click()# 输入"霍格沃兹测试开发"driver.find_element(By.ID,"kw").send_keys("霍格沃兹测试开发")# 清空搜索框中信息driver.find_element(By.ID,"kw").clear()
复制代码

自动化测试定位策略

选择定位器通用原则

  1. 与研发约定的属性优先(class 属性: [name='locate'])

  2. 身份属性 id,name(web 定位)

  3. 复杂场景使用组合定位:

  • xpath,css

  • 属性动态变化(id,text)

  • 重复元素属性(id,text,class)

  • 父子定位(子定位父)

  1. js 定位

Web 弹框定位

  • 场景 web 页面 alert 弹框

  • 解决: web 需要使用 driver.switchTo().alert() 处理

下拉框/日期控件定位

  • 场景: <input>标签组合的下拉框无法定位 <input>标签组合的日期控件无法定位

  • 解决: 面对这些元素,我们可以引入 JS 注入技术来解决问题。

文件上传定位

  • 场景: input 标签文件上传

  • 解决: input 标签直接使用 send_keys()方法


原文链接:https://ceshiren.com/t/topic/24897

发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨学习笔记之Web自动化测试_程序员_测试人_InfoQ写作社区