前期准备:

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. Swift实战(2)--在工程中添加object-C的类或者第三方框架(附翻译)

    原文地址:http://stackoverflow.com/questions/24002369/how-to-call-objective-c-code-from-swift Using Objec ...

  2. C# Arcgis Engine 获得鼠标按下位置的要素

    public IFeature GetFeatureOnMouseDown(IPoint point) { try { ILayer layer = Common.GetLayerByName(mMa ...

  3. Android 4.4 Fence在SurfaceFlinger中的应用

    网上关于android.fence的资料好少啊.差点儿没有,可是这个机制又在GUI系统中起着关键的数据,于是自己通读源代码和凝视.与大家分享下Fence究竟是怎么回事? Fence即栅栏.栅栏的角色与 ...

  4. android开发使用SQLite之写日记

    使用数据库实现对数据的存储. 以下上一个小样例,写日记. 效果例如以下:           当LIstView中没有数据显示时,我们须要告诉用户没有数据. 方法有二: 1. activity继承Li ...

  5. BZOJ 3671 NOI 2014 随机数生成器 贪心

    题目大意:实在是太难说明了,自己看pdf吧.. 思路:优先依照它说明的方法处理数组,然后为了让数列中尽可能多的出现小的数字,所以1是必需要出现的,这样才干使整个数列的排序后字典序最小. 我们思考,假设 ...

  6. CI框架源代码阅读笔记6 扩展钩子 Hook.php

    CI框架同意你在不改动系统核心代码的基础上加入或者更改系统的核心功能(如重写缓存.输出等). 比如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = ...

  7. VS添加程序集

    项目->添加->引用->程序集 可在项目的引用目录中,查看引用的程序集

  8. 项目: 更新(二) python 实现大概FTP的功能

    服务器利用 socketserver 模块 构造, 实现了 多进程. 客户端仍然利用的是底层的 socket模块. 只不过进行了更深度的 解耦, 新加或者删除 某些功能 更方便 在上一个版本的基础上, ...

  9. 微信小程序从零开始开发步骤(八)引入框架WeUI

    首先来看下WeUI的官方介绍: WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一.在微信小程序的开发过程中,涉及到的前端 ...

  10. WordPress出现Briefly unavailable for scheduled maintenance. Check back in a minute. 的解决方法

    WordPress出现 Briefly unavailable for scheduled maintenance. Check back in a minute. 解决方法: 登入FTP,然后把Wo ...