pywinauto二次封装(pywinnat.py)

将pywinauto常用方法进行封装,使得pywinauto用起来更简单

#头文件的引入
from pywinauto import application
from pywinauto import clipboard
import SendKeys
import win32api
import win32con
import os, sys, time

#二次封装的类
class Pywin(object):
#=======================
# pywin framwork main class
#=======================

        SLEEP_TIME = 1
        #初始化方法,初始化一个app
        def __init__(self):
                self.app = application.Application()

        #启动应用程序
        def run(self, tool_name):
                self.app.start_(tool_name)
                time.sleep(self.SLEEP_TIME)

        #连接应用程序
        def connect(self, tool_name):
                self.app.connect_(tool_name)
                time.sleep(self.SLEEP_TIME)

        #关闭应用程序
        def close(self, tool_name):
                window_name = window_name.decode(‘utf-8‘)
                self.app[window_name].Close()

        #最大化窗口
        def max_window(self, window_name):
                window_name = window_name.decode(‘utf-8‘)
                self.app[window_name].Maximize()
                time.sleep(self.SLEEP_TIME)

        #菜单点击
        def menu_click(self, window_name, menulist):
                 window_name = window_name.decode(‘utf-8‘)
                 menulist = menulist.decode(‘utf-8‘)
                 self.app[window_name].MenuSelect(menulist)
                 time.sleep(self.SLEEP_TIME)

        #输入内容
        def input(self, window_name, controller, content):
                window_name = window_name.decode(‘utf-8‘)
                controller = controller.decode(‘utf-8‘)
                content = content.decode(‘utf-8‘)
                self.app[window_name][controller].TypeKeys(content)
                time.sleep(self.SLEEP_TIME)

        #鼠标左键点击
        def click(self, window_name, controller, x = 0,y = 0):
                window_name = window_name.decode(‘utf-8‘)
                controller = controller.decode(‘utf-8‘)
                self.app[window_name][controller].Click(button = "left", pressed = "",  coords = (x, y))
                time.sleep(self.SLEEP_TIME)

        #鼠标左键点击(双击)
        def double_click(self, window_name, controller, x = 0,y = 0):
                window_name = window_name.decode(‘utf-8‘)
                controller = controller.decode(‘utf-8‘)
                self.app[window_name][controller].DoubleClick(button = "left", pressed = "",  coords = (x, y))
                time.sleep(self.SLEEP_TIME)

        #鼠标右键点击,菜单选择
        def right_click(self, window_name, controller, order):
                window_name = window_name.decode(‘utf-8‘)
                controller = controller.decode(‘utf-8‘)
                self.app[window_name][controller].RightClick()
                for down in range(order):
                        SendKeys.SendKeys(‘{DOWN}‘)
                        time.sleep(0.5)
                SendKeys.SendKeys(‘{ENTER}‘)
                time.sleep(self.SLEEP_TIME)

        #获取剪切板内容
        def getclipboard(self):
                return clipboard.GetData(format = 13)

        #使用win32点击屏幕
        def win32_left_click(self, (x, y), times):
                for count in range(times):
                        win32api.SetCursorPos((x, y))                                   win32api.mouse_event(win32con.MOUSEEVqENTF_LEFTDOWN,  0, 0, 0,0)
              win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,  0, 0, 0,0)
                        time.sleep(self.SLEEP_TIME)

        #使用win32点击屏幕
        def win32_right_click(self, (x, y), times):
                for count in range(times):
                        win32api.SetCursorPos((x, y))                                      win32api.mouse_event(win32con.MOUSEEVqENTF_RIGHTDOWN,  0, 0, 0,0)
              win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP,  0, 0, 0,0)
                        time.sleep(self.SLEEP_TIME)

if __name__ ==  ‘__main__‘:

        app = Pywin()
        #app.run(‘notepad.exe‘)
时间: 2024-12-13 11:02:39

pywinauto二次封装(pywinnat.py)的相关文章

HtmlTestRunner二次封装(TestRunner.py)

将HtmlTestRunner进行二次封装,是报告生成的更方便 import HTMLTestRunner import unittest import time, os class TestRunner(object): def __init__(self, cases="./"): self.case = cases def get_all_cases(self, class_name): return unittest.defaultTestLoader.loadTestsFro

selenium + python自动化测试unittest框架学习(五)webdriver的二次封装

因为webdriver的api方法很长,再加上大多数的定位方式是以xpath方式定位,更加让代码看起来超级长,为了使整体的代码看起来整洁,对webdriver进行封装,学习资料来源于虫师的<selenium +  python自动化测试>一书. 在与测试用例文件夹同一目录下新建一个文件夹package,用来放置封装方法的模块文件 我们将webdriver二次封装的文件命名为location.py from selenium import webdriver from test_case.pub

drf中 连表深度查询和ListSerializer类包括drf中Response二次封装

drf中Response二次封装: from rest_framework.response import Response ''' return MyResponse(status=1,msg='error',results=[],token='a.b.c',http_status=400,exception=True) Response模块的响应数据 data,最终数据results,Response模块需要向前台展示的一般有响应数据data(包括data里面的results),网络状态码s

web自动化针对PO模式进行二次封装之 basepage

在 PO 模式当中, 我们做到了 页面对象 与 测试用例 的 分离,但在页面对象编写时,我们仍然还有优化的空间.页面对象有一些共同的基本操作 ,可以封装起来,并可以在基本操作当中加上 日志 和 异常截图 的处理.比如说我们在查找元素时,都需要等待,在PO模式当中, 需要都写上 等待和查找元素,那么就可以将其封装起来,包括其它的一些比如:文本获取.元素属性获取.鼠标操作.窗口切换.iframe切换. alert弹框关闭. 文件上传.下拉框选择..... 当脚本运行的过程中,出现了用例失败,我们希望

drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族、自动补全图片链接

目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 序列化类其他配置(了解) 十大接口 BaseSerializer初始化方法 十大接口序列化总结 单查群查 单增群增 单删群删 单整体改/群整体改 单局部改/群局部改 群增群改配置 十大接口小结 字段提供就校验,不提供拉到 DjangoORM内置优化机制:一次最多查21条数据 models.py response.py serializers.py

iOS项目相关@AFN&amp;SDWeb的二次封装

一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装 1. HttpClient.h及.m .h定义了HTTP常用的四种GET POST PUT DELETE 请求 一般分别用做增删减查 定义前预处理,请求成功处理,请求失败处理的block 及带多参数w的方法声明 .m设置请求类型跟响应类型,监听网络是否有网络,如果没有,弹出网络异常的警示框 2. UIImageView+WebCache.h及

二次封装dojo slider

上次的二次封装timeslider,挺有意思,又来封装一个dojo的,样式还是用arcgis的.实现更多功能,包括HorizontalSlider和VerticalSlider, 刻度的显示隐藏,标签的显示和隐藏,上刻度和下刻度的显示隐藏,无序数显示刻度,标签图标的自由选择,大小选择....更多功能大家看完code也可以自己慢慢加进去哈~~~ code有点长,先上slider的class::MyCustomSlider.js [javascript] view plain copy /** * 

二次封装arcgis的timeslider

arcgis的timeslider是对dojo slider二次封装,项目需要,所有Map用统一样式的slider,所以写了一个common的dojo class,统一调用生成slider,作为对timeslider再次封装,感觉挺好用. 这个slider不一定要在Map里使用,还可以在其他地方调用.只是要包含arcgis的js包, 先上JavaScript class的code: [javascript] view plain copy /** * yilei create for IES  

毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.io/picasso/ 我们在上篇OkHttp的时候说过这个Picasso,学名毕加索,是Square公司开源的一个Android图形缓存库,而且使用起来也是非常的简单,只要一行代码就轻松搞定了,你会问,为什么不介绍一下Glide?其实Glide我有时间也是会介绍的,刚好上篇我们用到了Picasso,