因工作要求需对公司web网站进行自动化UI测试,苦寻多日终获得一个不错的Python+selenium基础测试框架,框架经过调试完美运行,特此记录并分享踩坑过程,愿能帮助更多想站在巨人的肩膀上工作的小将。
获取框架:https://github.com/yingoja/DemoUI
该框架技术:python3 + selenium3 + PO + yaml + ddt + unittest
框架工作流程图:
框架优点:
1.采用Page Object模式将页面定位和业务操作分开,分离测试对象和测试脚本,一个测试功能需创建一个对象类,用例灵活维护;
2.采用yaml管理web页面控件元素数据和测试用例数据,当元素ID等发生变化时,不需要去修改测试代码,只需修改对应的yaml文件即可;
框架目录结构介绍:
这里重点讲需要我们改动的部分目录,项目下载后别急着启动,该框架引用了分布式想要完美启动要先搭建selenium-Grid服务
看不懂我写的可以参考这个博客:https://www.cnblogs.com/longronglang/p/6220277.html
1. 进入项目drive目录拷贝selenium-server-standalone-2.53.0.jar至电脑任意盘根目录(这里我放在了电脑E盘)
2. 同样在drive目录拷贝chromedriver.exe至电脑E盘node文件夹(需要新建node文件夹)
3.在该目录创建hub.bat(服务中心),node.bat(节点机)
hub.bat文件内容如下:
Java -jar selenium-server-standalone-2.53.0.jar -role hub -port 4444
双击启动hub.bat文件获取ip
node.bat文件内容如下:
java -jar selenium-server-standalone-2.53.0.jar -role node -hub "http://192.168.8.108:4444/grid/register/" -Dwebdriver.ie.driver="E:\node\IEDriverServer.exe" -Dwebdriver.chrome.driver="E:\node\chromedriver.exe" -browser "browserName=internet explorer,maxInstances=5,version=8,platform=WINDOWS" -browser "browserName=chrome,maxInstances=20,version=76,platform=WINDOWS"
注意:
第一行的java -jar selenium-server-standalone-2.53.0.jar -role node -hub "http://192.168.8.108:4444/grid/register/"需要根据hub.bat文件获取的IP进行修改
第二行的Dwebdriver.ie.driver="E:\node\IEDriverServer.exe"需要根据自己实际的存放路径进行修改
双击启动node.bat文件
hub.bat和node.bat文件要一直保持启动状态,关闭后web自动化测试项目无法运行,显示驱动异常
紧接着将项目public-driver第14行host值修改为192.168.8.108:4444
接下来项目可以正常运行,但是框架自动打开的web网站网页的元素进行了改动,我们需要重新将testyaml项目下的login.yaml进行修改
testinfo: - id: test_login001 title: 登录测试 info: 打开抽屉首页 testcase: - element_info: login_btn find_type: ID operate_type: click info: 打开登录对话框 - element_info: phone find_type: NAME operate_type: send_keys info: 输入手机号 - element_info: password find_type: NAME operate_type: send_keys info: 输入密码 # - element_info: //input[@class='keeplogin'] # find_type: XPATH # operate_type: click # info: 单击取消自动登录单选框 - element_info: //button[text()='登录'] find_type: XPATH operate_type: click info: 单击登录按钮 - element_info: //div[1]/div/header/div/span find_type: XPATH operate_type: perform info: 鼠标悬停账户菜单 - element_info: //div[1]/div/header/div/span/span/a[6] find_type: XPATH operate_type: click info: 选择退出 check: - element_info: //div[4]/div/div[4]/div[3]/div[1] find_type: XPATH info: 检查输入手机号或密码,登录异常提示div - element_info: //div[1]/div/header/div/span/span/a[1] find_type: XPATH info: 登录成功 - element_info: //*[@id="login_btn"] find_type: XPATH info: 检查退出登录是否成功
这是我修改好的可复制粘贴,具体怎么修改的,说来话长,大家可以再评论区下方留言将会得到解答。
testdata目录下的login_data也要进行修改
- id: test_login001.1 detail : 手机号和密码为空登录 screenshot : phone_pawd_empty data: phone: "" password: "" check : - 手机号不能为空 - id: test_login001.2 detail : 手机号为空登录 screenshot : phone_empty data : phone: "" password : aa check : - 手机号不能为空 - id: test_login001.3 detail : 密码为空登录 screenshot : pawd_empty data : phone : 13511112222 password: "" check : - 密码不能为空 - id: test_login001.4 detail : 非法手机号登录 screenshot : phone_error data : phone : abc password: aa check : - 手机号不能为空 - id: test_login001.5 detail : 手机号或密码不匹配 screenshot : pawd_error data : phone : 13511112222 password: aa check : - 密码6~16位数字、大小写字母或常用符号 - id: test_login001.6 detail : 手机号和密码正确 screenshot : phone_pawd_success data : phone : '这里改成正确的手机号码(可以自己去注册一个)' password: '正确的密码' check : - (这里要填写你登录成功后的昵称)
这是我修改好的可复制粘贴,具体怎么修改的,说来话长,大家可以再评论区下方留言将会得到解答