【原创】基于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是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置.本地配置和运行.服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以 ...
随机推荐
- CodeForcesGym 100502K Train Passengers
Train Passengers Time Limit: 1000ms Memory Limit: 524288KB This problem will be judged on CodeForces ...
- 洛谷 P2913 [USACO08OCT]车轮旋转Wheel Rotation
P2913 [USACO08OCT]车轮旋转Wheel Rotation 题目描述 Farmer John has an old-time thresher (wheat harvester) tha ...
- C++里的模板
1.泛型编程 --即实现一个通用的标准容器库. 所谓通用的标准容器库,就是要做到:比方List类存放全部肯恩类型的对象这样的事:泛型编程让你编写一个全然一般化并可反复使用的算法,其效率与针对某特定数 ...
- 文件/文件夹权限设置命令chmod的具体使用方法
chmod是文件/文件夹权限设置的命令,在Linux中常常遇到.本博文下面总结chmod的具体使用方法. Linux/Unix的档案调用权限分为三级,即档案拥有者user.群组group.其它othe ...
- POJ 3592 Instantaneous Transference(强连通+DP)
POJ 3592 Instantaneous Transference 题目链接 题意:一个图.能往右和下走,然后有*能够传送到一个位置.'#'不能走.走过一个点能够获得该点上面的数字值,问最大能获得 ...
- 如日中天的Uber到底是用什么开发语言做到的?
Uber将正在蓬勃发展的Go和Node.js这两个语言很好的融合到其系统上面来.Uber的站点可靠性project师Tom Croucher在近期于波兰举行的Node.js互动大会上详尽的对该公司所用 ...
- worldpress 的 GPG 加密插件
worldpress 的 GPG 加密插件资料来源 https://trog.qgl.org/wpgpg/这个插件的作用是,用GPG 加密worldpress 的输出内容,然后在chrome浏览器中上 ...
- dfs算法中求数列的组合
/* 从13个书中挑选5个值,他们的组合可能是 什么, 如下代码 dfs深度遍历, 和全排列是一种方法,但是思路不同 */ public class Main { static int count = ...
- Enity Framework已经是.NET下最主要的ORM了
Enity Framework已经是.NET下最主要的ORM了.而ORM从一个Mapping的概念开始,到现在已经得到了一定的升华,特别是EF等对ORM框架面向对象能力的升华.切实地说,就是ORM让数 ...
- 分享一个js加密的几种方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...