因工作要求需对公司web网站进行自动化UI测试,苦寻多日终获得一个不错的Python+selenium基础测试框架,框架经过调试完美运行,特此记录并分享踩坑过程,愿能帮助更多想站在巨人的肩膀上工作的小将。

获取框架:https://github.com/yingoja/DemoUI

该框架技术:python3 + selenium3 + PO + yaml + ddt + unittest

框架工作流程图:

python+selenium python+selenium框架_jar

 

框架优点:

1.采用Page Object模式将页面定位和业务操作分开,分离测试对象和测试脚本,一个测试功能需创建一个对象类,用例灵活维护;

2.采用yaml管理web页面控件元素数据和测试用例数据,当元素ID等发生变化时,不需要去修改测试代码,只需修改对应的yaml文件即可;

框架目录结构介绍:

python+selenium python+selenium框架_jar_02

这里重点讲需要我们改动的部分目录,项目下载后别急着启动,该框架引用了分布式想要完美启动要先搭建selenium-Grid服务

看不懂我写的可以参考这个博客:

1. 进入项目drive目录拷贝selenium-server-standalone-2.53.0.jar至电脑任意盘根目录(这里我放在了电脑E盘)

2. 同样在drive目录拷贝chromedriver.exe至电脑E盘node文件夹(需要新建node文件夹)

3.在该目录创建hub.bat(服务中心),node.bat(节点机)

python+selenium python+selenium框架_python+selenium_03

hub.bat文件内容如下:

 

Java -jar selenium-server-standalone-2.53.0.jar -role hub -port 4444

  

双击启动hub.bat文件获取ip

    

python+selenium python+selenium框架_chrome_04

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"需要根据自己实际的存放路径进行修改

python+selenium python+selenium框架_chrome_05

 

双击启动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 :

    - (这里要填写你登录成功后的昵称)

  

这是我修改好的可复制粘贴,具体怎么修改的,说来话长,大家可以再评论区下方留言将会得到解答