UI自动化笔记

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 运行用例并生成测试报告,项目工程部署完毕后直接运行该文件就可以执行所有的测试用例
在这里插入图片描述

4、定位元素及页面操作方法
元素定位的8种方法
在这里插入图片描述

切换子页面
在这里插入图片描述

滚屏操作
在这里插入图片描述

页面前进后退和刷新
在这里插入图片描述

鼠标控制
在这里插入图片描述

操作下拉列表
web网页大多选择功能使用下拉列表方式实现,在selenium进行自动化过程中,可通过Select类实现下拉列表的多种操作。
使用时需先导入Select类:from selenium.webdriver.support.select import Select
在这里插入图片描述
窗口切换及截图
在这里插入图片描述在这里插入图片描述
动态元素定位
根据部分元素属性定位,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()可以在用例执行前布置环境,以及在用例执行后清理环境

python+UI自动化测试框架代码可以从下面的连接处自取:
https://download.csdn.net/download/happy512happy/51839581

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动化个人学习第一步笔记import os import time import logging import configparser from appium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait base_path=os.path.abspath(os.path.dirname(os.path.dirname(__file__))) class comm: @staticmethod def driver(): """APPIUM驱动""" desired_caps={} desired_caps['platformName']=comm.conf(section='desired_caps',key='platformName') # 手机操作系统 desired_caps['deviceName']=comm.conf(section='desired_caps',key='deviceName') # 手机设备号 desired_caps['platformVersion']=comm.conf(section='desired_caps',key='platformVersion') # 操作系统版本 desired_caps['appPackage']=comm.conf(section='desired_caps',key='appPackage') # app包名 desired_caps['appActivity']=comm.conf(section='desired_caps',key='appActivity') # app ACTIVITY名称 desired_caps['resetKeyboard']=True # 是否在测试结束后将键盘重轩为系统默认的输入法。 desired_caps['newCommandTimeout']=comm.conf(section='desired_caps',key='newCommandTimeout') # Appium服务器待appium客户端发送新消息的时间。默认为60秒 desired_caps['noReset'] = True # true:不重新安装APP,false:重新安装app desired_caps['automationName'] = comm.conf(section='desired_caps',key='automationName') # appium1.5以后的版本才支持toast定位 driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) return driver @staticmethod def get_element(driver,by,selector): """ description:封装定位方法;id指的是resource-id,class_name指的是class,uiautomator使用方法:'new UiSelector().text("文字内容")',xpath定位元素 uthor:clay date: 2020-5-08 params: driver 驱动,by 选择定位的方式,selector 定位的语法 """ if by == 'id': element=driver.find_element_by_id(selector) elif by =='class_name': element=driver.find_element_by_class_name(selector) elif by =='uiautomator': element=driver.find_elemen_by_android_uiautomator(selector) elif by == 'xpath': element=driver.find_element_by_xpath(selector) else: raise NameError return element @staticmethod def tap(driver,upper_left_x,upper_left_y,bottom_right_x,bottom_right_y,time): """ description:根据坐标触发点击事件 uthor:clay date: 2020-5-08 params: driver:驱动,upper_left_x:左上角坐标X轴,upprt_lef_y:左上角Y轴,bottom_right_x:右下角X轴,bottom_right_y:右下角Y轴,time:点击停留的时间 ms为单位 """ tap_=driver.tap([(upper_left_x,upper_left_y),(bottom_right_x,bottom_right_y)],time) return tap_ @staticmethod def tips(driver, text): """ descirption:xpath定位toast提示 author:supper date: 2029-10-06 params: text:元素的text文本 """ try: toast_loc = ("xpath", "//*[contains(@text,'%s')]" % text) toast = WebDriverWait(driver, 5, 0.1).until(EC.presence_of_element_located(toast_loc)) text = toast.text print('提示为:%s' % text) return True except: return False
——Ve.3.5.3 更新说明—— 1、修复了一个导致程序崩溃的BUG。 由Boier反馈。 ——Ve.3.5.2 更新说明—— 1、增加了TXT文章的导入导出功能,将TXT文章按字符切为节点。 ——Ve.3.5.1 更新说明—— 1、修复了一些联想BUG。 ——Ve.3.5.0 更新说明—— 1、增加节点联想功能,将已有节点笔记放入“用户文件夹路径\Documents\Note\Fictitious\”目录下,创建或修改节点时会显示其他笔记文件内同节点标题的连接与被连接项。按ESC键取消当前节点的联想显示,按回车自动创建所有联想项。 2、主界面菜单栏【功能】——【打开联想节点文件目录】可打开联想文件的存放目录。 ——Ve.3.4.1 更新说明—— 1、修复了圆周动作的一系列BUG。 2、新增有损替换功能。Ctrl+H可打开替换界面。可批量替换节点名、内容、连接内容。 3、节点编辑界面——【节点】——【选域同步修改】内可设置批量同步选域内节点指定内容到当前编辑节点对应内容。 ——Ve.3.4.0 更新说明—— 1、控制台文本增加右键菜单。 2、修复新版本导致的搜索结果到新文件程序崩溃的BUG。 3、控制台使用“PageUp/PageDown”键查看命令使用历史 4、新增节点动作控制相关指令: ·设置动作更新速度[SETACTIONUPDATASPEED/SAUS] 更新间隔(数值) ·启动动作时钟[STARTACTIONTIMER/SAT] 1(启动)/0(关闭) ·定义动作[DEFINEACTION/DEFA/DA] 动作名(字符串),动作节点ID1(数值)[|动作节点ID2(数值)[|动作节点ID3(数值)[...]]],动作时间执行间隔(数值),动作类型(直线/圆周),直线:向量X(数值),向量Y(数值)/[圆周:角度(数值),中心节点ID(数值)],动作次数(数值),是否循环(0/1) ·重启动作[RESTARTACTION/RA] 动作名(字符串) ·关闭动作[OFFACTION/OA] 动作名(字符串) ·打印动作列表[PRINTACTIONLIST/PAL] ·打印可执行动作列表[PRINTEXECUTABLEACTIONLIST/PEAL] ——Ve.3.3.2 更新说明—— 1、增加了节点化整开启矩线后化整位置索引线。 2、优化了文件保存与否检查,避免原检查时保存文件引起的程序崩溃。 3、完成了RGB色与VBColor互转功能。 ——Ve.3.3.1 更新说明—— 1、加强了网络接口的稳定性。 2、取消了文件保存的资源释放,避免重复保存导致的程序崩溃。(可能会导致自动保存大文件时体验不佳) ——Ve.3.3.0 更新说明—— 1、新增程序网络接口执行控制台指令。 2、新增指令: ·创建节点[NEWBUILTNODE/NBN] X位置(数值) Y位置(数值) 标题(字符串) 内容(字符串) VBColor(数值) 大小(数值) 选中(0/1) ·编辑节点[EDITNODE/EN] 节点遍历ID(数值) 标题(字符串) 内容(字符串) VBColor(数值) 大小(数值) ·位移节点[MOVENODE/MN] 节点遍历ID(数值) X位置(数值) Y位置(数值) ·删除节点[DELETENODE/DN] 节点遍历ID1(数值),节点遍历ID2(数值),节点遍历ID3(数值)... ·选中节点[SELECTNODE/SN] 节点遍历ID1(数值),节点遍历ID2(数值),节点遍历ID3(数值)... ·创建连接[NEWBUILTNODE/NBL] 连接源节点遍历ID(数值) 连接去节点遍历ID(数值) 连接内容(字符串) 连接粗细(数值) 选中(0/1) *连接已存在会被删除 ·编辑连接内容[EDITLINE/EL] 源节点遍历ID(数值) 去节点遍历ID(数值) 连接内容(字符串) 连接粗细(数值) ·选中连接[SELECTLINE/SL] 连接1源节点遍历ID(数值):连接1去节点遍历ID(数值),连接2源节点遍历ID(数值):连接2去节点遍历ID(数值),连接3源节点遍历ID(数值):连接3去节点遍历ID(数值)... ——Ve.3.2.1 更新说明—— 1、优化了节点整化机制。 ——Ve.3.2.0 更新说明—— 1、新增矩线功能,开启后可看到全局坐标系。 2、新增指令: ·矩线间隔[RECTANGLESTEP/RECSTEP] 步长(数值) ·矩线颜色[RECTANGLECOLOR/RECCOLOR] VBColor(数值)[RColor(数值) GColor(数值) BColor(数值)] ·节点放缩[NODEZOOM] 基点节点名(字符串) X轴放缩倍数(数值) Y轴放缩倍数(数值) 3、新增节点整化功能,开启后将限制节点坐标并纠正对齐到矩线网络。 ——Ve.3.1.3 更新说明—— 1、修复没有连接或节点笔记文件作为子节点视图打开失败。 2、修改控制台指令: ·阵列新增节点[FORNODEADD] xStart(数值) xStep(数值) xCounts(数值) yStart(数值) yStep(数值) yCounts(数值) nodeTitle(字符串) nodeContent(字符串) pitchOn(0/1) size(数值) color(数值) 3、修复PNG打印边界不等留白的BUG,添加了主界面字体及大小、颜色的获取。 4、新增指令: ·自增偏移量[SELFIM] i偏移 x偏移 y偏移 说明:自增偏移变量使用在阵列新增节点的标题及内容中,以[i](顺序自增),[x](横轴自增),[y](纵轴自增)三种方式进行偏移。 ·打印字典[PRINTDIC] 5、新增整化节点功能,将选中节点坐标整数化。 ——Ve.3.1.2 更新说明—— 1、节点内容“颜色[R(数值),G(数值),B(数值)]”或“颜色[VBColor(数值)]”可自定义节点颜色。 2、节点内容“波值[Value(数值)]”可定义波形化时该节点Y轴值。 3、选中具有像素特征内容的节点,按P键可快速像素位置、颜色阵列节点。 4、将导出BMP位图从全局节点导出改为选中节点导出。 ——Ve.3.1.1 更新说明—— 1、优化了位图导入节点建立的机制,将不会建立连接。 2、导出为图片功能将索引全部节点内容到图片。 3、子节点预览图增加新实例中显示功能按钮。(预览窗体左上方蓝色圆圈) ——Ve.3.1.0 更新说明—— 1、增加了BMP/PNG/JPG图片导入成节点功能。(请勿导入像素大于100*100的图片!) 2、增加了节点导出为BMP图片的功能;节点内容中“像素[X位置(数值),Y位置(数值),VBColor值(数值)]”会被转化成导出图片的像素点。 3、增加了子节点图预览功能;节点内容中“笔记[路径]”路径为有效NTX文件,鼠标悬停在该节点上即可预览其节点图。 4、优化了字符串输入框窗体UI。 5、新增指令: ·设置树状文本导入位置控制常数[SETTREETXTINPOSCONTROLCONST/STTIPCC/STIPC] 根节点X(数值) 根节点Y(数值) 节点X间隔(数值) 节点Y间隔(数值) ·设置位图导入位置控制常数[SETIMAGEINPOSCONTROLCONST/SIIPCC/SIPC] 根节点X(数值) 根节点Y(数值) 节点X间隔(数值) 节点Y间隔(数值) 6、删除了指令: ·设置导入位置控制常数[SETINPOSCONTROLCONST/SIPCC] 7、帮助界面增加更新说明文本引用。 ——Ve.3.0.3 周末特别版 更新说明—— 1、增加了流光溢彩模式中,节点彩虹变。 2、修复了流光溢彩选项不能保存的BUG。 ——Ve.3.0.3 更新说明—— 1、将Excel文件导入修改为TXT文件导入。 2、优化了流光溢彩模式,性能提升10倍。 3、将彩虹线模式中的选中连接变为彩虹线。 4、修复了一些遗留BUG。 5、新增控制台指令: ·打印撤销列表[PRINTREVOKE] ·打印重做列表[PRINTREDO] ·设置导入位置控制常数[SETINPOSCONTROLCONST/SIPCC] 根节点X(数值) 根节点Y(数值) 节点X间隔(数值) 节点Y间隔(数值) 6、更新控制台指令: ·阵列新增节点[FORNODEADD] xStart(数值) xStep(数值) xEnd(数值) yStart(数值) yStep(数值) yEnd(数值) nodeTitle(字符串) nodeContent(字符串) pitchOn(0/1) size(数值) color(数值) 7、增加节点归一化功能,选中需要归一化的节点后,程序会将笔记内与选中节点节点名、内容、颜色、大小相同的节点删除,被删除节点的所有连接转移至归一节点。 8、增加TXT文本导出功能。 9、优化了菜单栏,使功能模块更直观。 PS:控制台使用:“帮助[HELP]”指令可浏览全部控制台命令。 ——Ve.3.0.2 更新说明—— 1、增加Shift+N,取消选区内所有节点的选中。 2、增加Shift+L,取消选区内所有连接的选中。 3、优化了彩虹线模式,减少了性能损失。 4、增加了默认节点大小与连接宽度设置。 5、增加了节点输入界面窗体大小记忆。 6、增加了打印全节点连接图为PNG图片的功能。 7、增加了圆阵阵列子节点功能;鼠标悬停到需要阵列子节点的节点上,点击A键后输入圆阵半径进行阵列。 8、增加了子节点颜色批量修改;鼠标悬停到需要修改子节点颜色的节点上,点击N键后选择新颜色以及深度即可。 9、增加了Excel文件导入功能。 ——Ve.3.0.1 更新说明—— 1、增加了连接清单。 2、优化了保存文件编码。 3、增加了连接内容显示,按C键可修改选中连接内容。 4、增加了连接宽度修改,选中连接或节点后按+/-键放大或缩小。 5、按“`”键可呼出控制台。 6、新增控制台指令: ·阵列新增节点[FORNODEADD] xStart(数值) xStep(数值) xEnd(数值) yStart(数值) yStep(数值) yEnd(数值) nodeTitle(字符串) nodeContent(字符串) pitchOn(0/1) ·显示鼠标坐标[VISMOUSEPOS] 1(显示)/0(不显示) ·字典项增加[DICITEMADD] 键A:值A,键B:值B…… ·字典项清空[DICREMOVe.ALL] PS:阵列新增节点中使用“[i]”字符串会被程序自动替换为阵列创建的节点的序号,如果有字典索引该序号,该序号会被替换成字典索引值。 7、增加了选域功能。Ctrl+数字,可将当前选中的对象记忆,再次按数字键时会直接选中记忆的对象;Shift+数字可清空该数字键对应的记忆。 ——Ve.3.0.0 更新说明—— 1、修复了点X无法结束程序的BUG。 2、增加了节点颜色修改。 3、增加了节点大小修改。(鼠标对准节点后点击+/-号键进行增大/缩小) 4、增加了主界面绘制时钟间隔自定义功能。(低配电脑的福音) 5、增加了窃印功能。(以Python的字典格式将节点文本化到剪切板) 6、增加节点清单,双击清单节点可快速将视角位移到该节点。 7、优化了主界面保存指示灯,使其不再闪烁。 8、增加了主界面缩放率提示。 9、增加了自定义主界面背景图片。 10、优化了标签输出节点内容窗体的位置及大小。 11、优化了保存文件编码,新编码节点内容兼容性更强。 12、更新了程序图标,兼容Windows XP。 13、增加了节点编辑内容保持,同内容可持续产生新节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值