从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 11 自动化测试--框架设计--基础知识 7--各种弹窗处理
测试学习记录,仅供参考!
各种弹窗的处理
以测试网站 https://www.leafground.com/alert.xhtml 页面中的 各种弹窗 为例;
1、在项目根目录下新建一个名称为 alert_handle.py 的 Python 文件;
2、之前在基础知识 1 常用函数中有提到过警告窗的处理;
在回顾一下:在测试 web 系统的时候,会经常遇到很多种 JS 弹窗,得把弹出的对话框关闭才能继续操作;
# 警告框的处理
# 使用 driver 对象 调用 switch_to 方法,然后在 .(点) 调用alert方法
alert = driver.switch_to.alert
# 用返回的对象 alert 去调用 accept() 来关闭弹窗
alert.accept()
例 1、简单对话框
3、Alert (Simple Dialog),弹窗中只有一个 确定 按钮;
4、优化 alert_handle.py 文件;
先定位到元素点击唤起弹窗,调用 driver 对象使用 switch_to 切换到 alert 弹窗上,然后把结果返回出去,用返回出去的结果对象调用里面的点击按钮 accept 方法;
# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep# 实例化浏览器
driver = webdriver.Edge()
# 网址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打开网页
driver.get(my_url)
# 窗口最大化
driver.maximize_window()# alert警告框处理
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt91"]/span[2]').click()
alert = driver.switch_to.alert
# 增加强制等待时间2秒查看效果
sleep(2)
# 点击确定
alert.accept()# 等待3秒
sleep(3)
# 关闭实例化浏览器
driver.quit()
例 2、确认对话框
5、Alert (Confirm Dialog),基于AlertDialog的 确认、取消 对话框;
6、优化 alert_handle.py 文件;
同样先定位到元素点击唤起弹窗,调用 driver 对象使用 switch_to 切换到 alert 弹窗上,然后把结果返回出去,用返回出去的结果对象调用里面的点击 确定、取消 按钮;
# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep# 实例化浏览器
driver = webdriver.Edge()
# 网址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打开网页
driver.get(my_url)
# 窗口最大化
driver.maximize_window()# alert警告框处理
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt91"]/span[2]').click()
alert = driver.switch_to.alert
# 增加强制等待时间2秒查看效果
sleep(2)
# 点击确定
alert.accept()# Alert (Confirm Dialog),有确定和取消按钮的弹框
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt93"]/span[2]').click()
alert = driver.switch_to.alert
sleep(2)
# alert.accept()
# 点击取消
alert.dismiss()# 等待3秒
sleep(3)
# 关闭实例化浏览器
driver.quit()
例 3、基本对话框
7、Sweet Alert (Simple Dialog),对话框蒙版之上,在父窗口最上层弹出一个窗口;
8、优化 alert_handle.py 文件;
先定位到元素点击唤起弹窗,然后需要判断能不能通过元素选择器去定位直接找到,判断弹窗是否存在内联框架 iframe、frame 里面,若存在内联框架,则需要先切入到内联框架中,若不在内联框架里面,可以直接使用元素定位去操作;;
# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep# 实例化浏览器
driver = webdriver.Edge()
# 网址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打开网页
driver.get(my_url)
# 窗口最大化
driver.maximize_window()# alert警告框处理
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt91"]/span[2]').click()
alert = driver.switch_to.alert
# 增加强制等待时间2秒查看效果
sleep(2)
# 点击确定
alert.accept()# Alert (Confirm Dialog),有确定和取消按钮的弹框
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt93"]/span[2]').click()
alert = driver.switch_to.alert
sleep(2)
# alert.accept()
# 点击取消
alert.dismiss()# Sweet Alert (Simple Dialog),是一个自定义的弹框库
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt95"]/span[2]').click()
# 若是在内联框架里面,需要先切入内联框架
# driver.switch_to.frame(0)
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt98"]/span[2]').click()# 等待3秒
sleep(3)
# 关闭实例化浏览器
driver.quit()
例 4、模态对话框
9、Sweet Modal Dialog,基于 JavaScript 实现的模态框;自行参考例 ;
10、优化 alert_handle.py 文件;
# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep# 实例化浏览器
driver = webdriver.Edge()
# 网址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打开网页
driver.get(my_url)
# 窗口最大化
driver.maximize_window()# alert警告框处理
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt91"]/span[2]').click()
alert = driver.switch_to.alert
# 增加强制等待时间2秒查看效果
sleep(2)
# 点击确定
alert.accept()# Alert (Confirm Dialog),有确定和取消按钮的弹框
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt93"]/span[2]').click()
alert = driver.switch_to.alert
sleep(2)
# alert.accept()
# 点击取消
alert.dismiss()# Sweet Alert (Simple Dialog),是一个自定义的弹框库
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt95"]/span[2]').click()
# 若是在内联框架里面,需要先切入内联框架
# driver.switch_to.frame(0)
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt98"]/span[2]').click()# Sweet Modal Dialog,是一个自定义的弹框库
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt100"]/span[2]').click()
sleep(2)
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt101"]/div[1]/a/span').click()# 等待3秒
sleep(3)
# 关闭实例化浏览器
driver.quit()
11、 在项目根目录下新建一个名称为 alert_handle01.py 的 Python 文件;
例 5、提示对话框
Prompt 提示对话框的最简单用法需要您希望显示的消息文本和用于处理用户输入的回调;若用户取消或关闭对话框,则输入的值将为null;否则,将传递文本输入的值。
12、Alert (Prompt Dialog),自行参考;
13、优化 alert_handle01.py 文件;
# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep# 实例化浏览器
driver = webdriver.Edge()
# 网址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打开网页
driver.get(my_url)
# 窗口最大化
driver.maximize_window()# Alert (Prompt Dialog)
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt104"]/span[2]').click()
alert = driver.switch_to.alert
alert.send_keys('这是一个Alert (Prompt Dialog)测试')
# 点击确定
alert.accept()
# 点击关闭
# alert.dismiss()# 等待3秒
sleep(3)
# 关闭实例化浏览器
driver.quit()
14、运行查看结果;
例 6、警告对话框
15、Sweet Alert (Confirmation)是一种替代原生 JavaScript alert
和 confirm
功能的插件,支持自定义样式和交互逻辑,常用于弹出提示框、确认操作等场景。自行参考;
例 7、属性对话框
16、Minimize and Maximize(最大化和最小化),自行参考;
17、其他请自行学习了解;
框架设计
百度百科
随着软件开发的快速发展,自动化测试在保证软件质量和提高开发效率方面扮演着越来越重要的角色;而一个高效且稳定的自动化测试框架是自动化测试成功的关键;
设计框架的原则
封装基类方法:对于一些通用的方法可以进行封装后再调用;
高内聚低耦合:每个模块尽可能独立完成自己的功能,尽量不过多的依赖于模块外部的代码;模块与模块之间接口的复杂程度尽量低,在类内部尽可能减少方法之间的调用,否则一个方法的变动会影响调用它的另一个方法;
代码脚本分离:业务代码、测试数据相互剥离、灵活调用;
框架的目录结构搭建
新建项目,项目名称自定义(自行设置)
第一个目录、config 配置文件
在项目根目录下新建名称为 config(configs) 的 Python 软件包,用来存放测试执行过程中所需要的相关配置文件,具有可扩展性;
在 config 软件包下新建一个名称为 setting.py 的Python文件,用来存放框架中需要用到的基本路径的配置,像是 log 日志级别的设置均可以到这里面;
第二个、公共模块
有叫 common(公共) 的,也有用 core(最核心的) 名称的,这里用 util_tools(工具),按个人喜好自行选择;一般用来存放一些通用的功能函数,存放一些项目通用的接口等;
在项目根目录下新建名称为 util_tools 的 Python 软件包,用来存放一些公共模块;例如:log 日志、读取配置文件的封装、做数据驱动的封装等等;
第三个、数据
在项目根目录下新建名称为 data(datas) 的目录,一般用来存放测试执行时的所需的相关测试文件、测试数据,例如:测试用例、测试集等;
第四个、报告
在项目根目录下新建名称为 report(reports) 的 Python 软件包,一般用来存放输出的测试报告;
第五个、日志
在项目根目录下新建名称为 log(logs) 的目录,一般用来存放测试执行时生成的日志文件,以便测试过程的追溯,方便排查测试问题等;
第六个、测试图片
在项目根目录下新建名称为 screenshot 的目录文件,用于存放截图图片;
第七个、测试用例
在项目根目录下新建名称为 testcase 的 Python 软件包,用来存放测试用例;可以在此软件包下新建多个目录去管理对应的模块;
第八个、页面类
在项目根目录下新建名称为 pageObject 的 Python 软件包,用来管理被测页面的页面类的元素和方法,一般是用来存放页面操作类的函数(页面元素和页面操作),和 testcase 的测试用例相互对应,例如:网站首页、登录页面、注册页面等等;
第九个、主函数 run.py 文件
一般主函数 run.py 文件都是在自动化测试项目文件根目录下,是用来执行测试用例的主入口;
第十个、项目依赖 requirements.txt 文件
一般可在项目根目录下(自定义文件路径),可选项,不过建议在自动化测试初步完成阶段生成一个此类文件,方便以后可移植性;
第十一个、项目说明 README.md 文件
一般可在项目根目录下(自定义文件路径),可选项;在软件开发中,readme.md(README.md)文件是一个项目的重要组成部分,自行选择;
第十二个、其他
自行按需添加其他文件;
所谓会了不难,难了不会;无论什么样的框架均是在实际工作中逐步完善的;
未完待续。。。