前期准备:

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进行自动化测试的更多相关文章

  1. robotium从入门到放弃 三 基于apk的自动化测试

      1.apk重签名   在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法. 首先将被测 ...

  2. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  3. 使用 Selenium 实现基于 Web 的自动化测试

    (转自http://www.ibm.com/developerworks/cn/web/1209_caimin_seleniumweb/index.html) Selenium 是一个用于 Web 应 ...

  4. 基于坐标的自动化测试神器---Total Control快速入门

    1.Total Control简单介绍 一款能够在PC上控制手机的软件,同时可以使用PC 触摸屏.鼠标.键盘, 全面操控 Android 手机,只需通过 USB 或 WiFi 连接手机至电脑,即可随时 ...

  5. 基于MBT的自动化测试工具——GraphWalker介绍和实际使用

    GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例. 本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWa ...

  6. 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码

    引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...

  7. Nightmare基于phantomjs的自动化测试套件

    今天将介绍一款自动化测试套件名叫nightmare,他是一个基于phantomjs的测试框架,一个基于phantomjs之上为测试应用封装的一套high level API.其API以goto, re ...

  8. Appium基于Python unittest自动化测试 & 自动化测试框架 -- PO并生成html测试报告

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  9. 基于Jmeter的自动化测试实施方案设计

    前言: Jmeter是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置.本地配置和运行.服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以 ...

随机推荐

  1. 【Uva 1630】Folding

    [Link]: [Description] 你能对字符串进行压缩的操作; 即把连续出现的相同的子串改成它出现的次数+这个最基本的字符串的形式; 问你这个字符串最短能被压缩得多短; [Solution] ...

  2. Python学习笔记3:简单文件操作

    # -*- coding: cp936 -*- # 1 打开文件 # open(fileName, mode) # 參数:fileName文件名称 # mode打开方式 # w     以写方式打开. ...

  3. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  4. hdu1234 开门人和关门人 (等价转换)

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  5. 操作excel脚本练习

    # -*- coding: utf-8 -*- import xlrd import xlwt import sys from xlwt import * from xlrd import open_ ...

  6. 在物理 Data Guard 中对异构主备系统的支持 (文档 ID 1602437.1)

    Data Guard中主数据库与物理备用数据库(Redo Apply)之间可以有什么差别?本说明针对重做应用和 Oracle Data Guard 12 发行版 1 进行了更新.它适用于 Oracle ...

  7. Linux下关机命令的区别 (halt,poweroff,reboot,shutdown,init)

    1.shutdown shutdown命令安全地将系统关机.    而在系统关机前使用shutdown命令﹐系统管理员会通知所有登录的用户系统将要关闭.并且login指令会被冻结﹐即新的用户不能再登录 ...

  8. 【CS Round #39 (Div. 2 only) C】Reconstruct Sum

    [Link]:https://csacademy.com/contest/round-39/task/reconstruct-sum/ [Description] 给你一个数字S; 让你找有多少对A, ...

  9. [置顶] Docker学习总结(2)——Docker实战之入门以及Dockerfile(二)

    csphere/php-fpm:5.4 # cd docker-training/php-fpm/ # ls Dockerfile nginx_nginx.conf supervisor_nginx. ...

  10. 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 ...