【原创】基于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是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置.本地配置和运行.服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以 ...
随机推荐
- 【Uva 1630】Folding
[Link]: [Description] 你能对字符串进行压缩的操作; 即把连续出现的相同的子串改成它出现的次数+这个最基本的字符串的形式; 问你这个字符串最短能被压缩得多短; [Solution] ...
- Python学习笔记3:简单文件操作
# -*- coding: cp936 -*- # 1 打开文件 # open(fileName, mode) # 參数:fileName文件名称 # mode打开方式 # w 以写方式打开. ...
- 在 Android 应用程序中使用 SQLite 数据库以及怎么用
part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...
- hdu1234 开门人和关门人 (等价转换)
开门人和关门人 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 操作excel脚本练习
# -*- coding: utf-8 -*- import xlrd import xlwt import sys from xlwt import * from xlrd import open_ ...
- 在物理 Data Guard 中对异构主备系统的支持 (文档 ID 1602437.1)
Data Guard中主数据库与物理备用数据库(Redo Apply)之间可以有什么差别?本说明针对重做应用和 Oracle Data Guard 12 发行版 1 进行了更新.它适用于 Oracle ...
- Linux下关机命令的区别 (halt,poweroff,reboot,shutdown,init)
1.shutdown shutdown命令安全地将系统关机. 而在系统关机前使用shutdown命令﹐系统管理员会通知所有登录的用户系统将要关闭.并且login指令会被冻结﹐即新的用户不能再登录 ...
- 【CS Round #39 (Div. 2 only) C】Reconstruct Sum
[Link]:https://csacademy.com/contest/round-39/task/reconstruct-sum/ [Description] 给你一个数字S; 让你找有多少对A, ...
- [置顶]
Docker学习总结(2)——Docker实战之入门以及Dockerfile(二)
csphere/php-fpm:5.4 # cd docker-training/php-fpm/ # ls Dockerfile nginx_nginx.conf supervisor_nginx. ...
- iOS报错 -pie can only be used when targeting iOS 4.2 or later
近期,使用师兄的project时.突然报错之前没发现这个错误.信息例如以下: ld: -pie can only be used when targeting iOS 4.2 or later cla ...