1、UI自动化的原理
是通过selenium来实现web自动化的,其中的原理涉及到三个最主要的东西:代码、webdriver、浏览器;代码使用http通信启动webdriver,然后webdriver驱动浏览器执行自动化代码;浏览器执行完成后返回执行结果给webdriver,webdriver把执行结果告诉python代码

2.UI自动化流程
先会进行评估若是项目更新迭代比较多、回归较多就需要介入自动化,然后挑选适合做自动的模块, 再从已有的功能用例中挑选自动化测试用例,搭建自动化测试环境,然后搭建自动化测试框架,再进行用例脚本的开发,然后执行测试,最后是脚本的补充及维护

3.UI自动化框架搭建思路
采用python+selenium+unittest+HTMLTestRunnerPO模式进行自动化框架的搭建
我在创建自动化项目的时候,分为几大目录:
第一个是公共目录,里面包含了一些公共类,比如
配置文件处理类:这个文件主要通过ConfigParser这个模块封装了配置文件读写的方法
日志处理类:这个文件主要通过logging这个模块进行日志器相关操作的封装,用于执行用例时记录相关日志信息
获取路径类:这个文件主要通过os这个模块获取项目目录和文件的路径

第二个目录是页面对象目录,里面包含页面基础类和页面对象类,页面基础类主要包含元素定位、切换frame和窗口、处理弹窗和列表等的一些方法;页面对象类是给每个系统页面封装成一个页面对象类,包含对元素的操作的一些方法

第三个目录是测试数据,采用的py文件进行测试数据的存放
第四个目录是配置文件目录,里面存放了一个config的配置文件,包含URL、浏览器的类型等常用的固定的配置项,用于方便的调用读取

第五个目录是测试用例目录
里面包含很多的test-case,po模式中的业务层也是在test-case里面实现,通过unittest+ddt读取测试数据并执行测试用例,然后进行断言校验

第六个目录是报告和日志目录,用于存放生成的测试报告及日志文件
还有一个额外的目录,用于存放脚本执行过程出现异常时的截图

第七个run.py:通过unittest+HTMLTestRunner 运行用例并生成测试报告,项目工程部署完毕后直接运行该文件就可以执行所有的测试用例

UI Automation 原理图 ui自动化原理_软件测试

4、定位元素及页面操作方法

元素定位的8种方法

UI Automation 原理图 ui自动化原理_配置文件_02

切换子页面

UI Automation 原理图 ui自动化原理_软件测试_03

滚屏操作

UI Automation 原理图 ui自动化原理_配置文件_04

页面前进后退和刷新

UI Automation 原理图 ui自动化原理_自动化测试_05

鼠标控制

UI Automation 原理图 ui自动化原理_配置文件_06

操作下拉列表

web网页大多选择功能使用下拉列表方式实现,在selenium进行自动化过程中,可通过Select类实现下拉列表的多种操作。

使用时需先导入Select类:from selenium.webdriver.support.select import Select

UI Automation 原理图 ui自动化原理_用例_07


窗口切换及截图

UI Automation 原理图 ui自动化原理_用例_08

UI Automation 原理图 ui自动化原理_自动化测试_09


动态元素定位

根据部分元素属性定位,xpath中提供了三个非常好的方法来为我们定位部分属性值:

driver.findElement(By.xpath("//input [contains(@id, ‘auto’)]"))
 driver.findElement(By.xpath("//input [starts-with(@id,‘auto’)]")
 driver.findElement(By.xpath("//input [ends-with(@id, ‘auto’)]")

5.unittest
unittest是Python自带的单元测试框架,我们可以用其来作为我们自动化测试框架的用例组织执行框架。

unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,再由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。

用 setUp()、tearDown()、setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境