【原创】基于pyautogui进行自动化测试
前期准备:
python3.6
pyautogui
pywinauto
以下代码实现内容:
1.打开记事本
2.记事本中输入This is a test
3.保存内容
4.退出进程
import pyautogui
from pywinauto import application
import time
import os class Autogui():
def __init__(self):
self.app=application.Application() def run(self, tool_name):
self.app.start(tool_name)
time.sleep(2) #defined coordinates
def coordinate(self,path):
try:
coordinates = pyautogui.locateOnScreen(path)
x, y = pyautogui.center(coordinates)
return x,y
except Exception as e:
print('Undefined coordinates: ', e) #Abnormal judgment
def onscreen(self,x,y,content1):
while pyautogui.onScreen(x, y) == True:
print(content1)
break def moveto(self,x,y):
pyautogui.moveTo(x,y,0.5,pyautogui.easeInQuad) def moverel(self,x,y):
pyautogui.moveRel(x,y,1,pyautogui.easeInQuad) def leftclick(self,x,y):
pyautogui.moveTo(x,y,0.5,pyautogui.easeInQuad)
pyautogui.PAUSE=0.5
pyautogui.click(button='left') def leftclick_down(self,x,y):
pyautogui.moveTo(x,y,0.5,pyautogui.easeInQuad)
pyautogui.PAUSE=0.5
pyautogui.mouseDown(button='left') def leftclick_up(self,x,y):
pyautogui.moveTo(x,y,0.5,pyautogui.easeInQuad)
pyautogui.PAUSE=0.5
pyautogui.mouseUp(button='left') def rightclick(self,x,y):
pyautogui.moveTo(x,y,0.5,pyautogui.easeInQuad)
pyautogui.PAUSE=0.5
pyautogui.click(button='right') def middleclick(self0,x,y):
pyautogui.moveTo(x,y,0.5,pyautogui.easeInQuad)
pyautogui.PAUSE=0.5
pyautogui.click(button='middle') def doubleclick(self,x,y):
pyautogui.moveTo(x,y,0.5,pyautogui.easeInQuad)
pyautogui.PAUSE=0.5
pyautogui.doubleClick(button='left') def keydown(self,key):
pyautogui.keyDown(key) def press(self,key):
pyautogui.press(key) def keyup(self,key):
pyautogui.keyUp(key) def hotkey(self,key1,key2):
pyautogui.hotkey(key1,key2) if __name__=='__main__':
Test=Autogui()
application_path=input('Application path : ')
Test.run(application_path)
# Test.run('notepad.exe')
time.sleep(1)
source_Path='./fouce.png'
source_judge_Path='./fouce_judge.png'
content1='The edit operation is correct'
content2='The edit operation is fail'
key1='s'
key2='ctrlleft' # edit
try:
Test.leftclick(Test.coordinate(source_Path)[0],
Test.coordinate(source_Path)[1])
pyautogui.typewrite('This is a test',0.1)
time.sleep(0.5)
Test.onscreen(Test.coordinate(source_judge_Path)[0],
Test.coordinate(source_judge_Path)[1], content1)
except Exception as e:
print(content2 + ': ', e) # save
try:
time.sleep(2)
Test.hotkey(key2, key1)
time.sleep(0.5)
print('The save operation is correct')
except Exception as e:
print('Save Error: ', e) try:
time.sleep(2)
os.system('taskkill /F /IM notepad.exe')
except Exception as e:
print('Exit Error: ',e)
input()
贴上代码中两张图片,fouce.png 用来将光标定位到输入区域,fouce_judge.png 用来跟实际结果做对比,判断实际结果是否正确
fouce.png
fouce_judge.png
pyautogui自动化脚本优点
1.不用担心因为分辨率的改变导致脚本失效
2.完全自定义日志输出
3.真UI自动化,可以判断每一步UI是否正确
【原创】基于pyautogui进行自动化测试的更多相关文章
- robotium从入门到放弃 三 基于apk的自动化测试
1.apk重签名 在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法. 首先将被测 ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- 使用 Selenium 实现基于 Web 的自动化测试
(转自http://www.ibm.com/developerworks/cn/web/1209_caimin_seleniumweb/index.html) Selenium 是一个用于 Web 应 ...
- 基于坐标的自动化测试神器---Total Control快速入门
1.Total Control简单介绍 一款能够在PC上控制手机的软件,同时可以使用PC 触摸屏.鼠标.键盘, 全面操控 Android 手机,只需通过 USB 或 WiFi 连接手机至电脑,即可随时 ...
- 基于MBT的自动化测试工具——GraphWalker介绍和实际使用
GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例. 本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWa ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- Nightmare基于phantomjs的自动化测试套件
今天将介绍一款自动化测试套件名叫nightmare,他是一个基于phantomjs的测试框架,一个基于phantomjs之上为测试应用封装的一套high level API.其API以goto, re ...
- Appium基于Python unittest自动化测试 & 自动化测试框架 -- PO并生成html测试报告
基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...
- 基于Jmeter的自动化测试实施方案设计
前言: Jmeter是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置.本地配置和运行.服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以 ...
随机推荐
- Intellij IDEA使用指南(持续更新)(转)
一.项目层面 1.Java开发工具IntelliJ IDEA导入项目 http://jingyan.baidu.com/article/a17d52852118ac8098c8f2c1.html 2. ...
- SQL解析器的性能測试
对同一个sql语句,使用3种解析器解析出ast语法树(这是编译原理上的说法,在sql解析式可能就是解析器自己定义的statement类型).运行100万次的时间对照. package demo.tes ...
- Intersection between a 2d line and a conic in OpenCASCADE
Intersection between a 2d line and a conic in OpenCASCADE eryar@163.com Abstract. OpenCASCADE provid ...
- DSP开发中遇到的问题 - 类指针未初始化后果
收到RECEIVE_REQ_MSG消息时会运行以下的代码,这里由于某种原因m_receiverSlaverController的值仍为NULL,并没有指向详细的CReceiverSlaverContr ...
- modSecurity规则学习(五)——DDOS攻击检测
1.IP访问频率 SecAction phase:1,nolog,pass,setvar:IP.counter=+1 SecRule IP:UPDATE_RATE "@gt 10" ...
- 使用Java语言开发微信公众平台(五)——被关注回复与关键词回复
在上一篇文章中,我们实现了文本消息的接收与响应.可以在用户发送任何内容的时候,回复一段固定的文字.本章节中,我们将对上一章节的代码进行适当的完善,同时实现[被关注回复与关键词回复]功能. 一.微信 ...
- JavaScript笔记(5)
1.return 跳出当前函数 返回一个结果 <script> //return可以跳出当前函数 所以return写在函数的最后一行 function out() { return fun ...
- ManagementObjectSearcher 对象获取串口列表
首先,需引用using System.Management; 可先建个枚举类,如下 #region WIN32 API /// <summary> /// 枚举win32 api /// ...
- 【2017 Multi-University Training Contest - Team 5】Rikka with Graph
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6090 [Description] 给你n个点; 让你在这n个点上最多连m条无向边; 使得 ∑ni= ...
- HDU——T 4738 Caocao's Bridges
http://acm.hdu.edu.cn/showproblem.php?pid=4738 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...