首页 > 编程语言 >桌面软件/exe程序软件自动化大宝剑--lackey之二次封装以及selenium模仿

桌面软件/exe程序软件自动化大宝剑--lackey之二次封装以及selenium模仿

时间:2024-10-20 10:58:38浏览次数:5  
标签:exe description lackey pattern self param path 软件

  1 # lackey 二次封装
  2 
  3 class lackeyAtion(object):
  4 
  5     #初始化,有需要再加
  6     def __init__(self):
  7         self.lackey = lackey.Screen(0)
  8         self.lackey.setAutoWaitTimeout(30)
  9 
 10     #截屏需要保存路径,截图的名字
 11     def screen_shot(self,path,name):
 12         try:
 13             path = path.decode('utf-8')
 14             name = name.decode('utf-8')
 15             self.lackey.saveScreenCapture(path,name)
 16         except:
 17             logging.exception("screeshoot fail!!!")
 18             raise
 19 
 20     #等待显现
 21     def wait_appear(self,pattern,description,path):
 22         try:
 23             if self.lackey.wait(pattern):
 24                 logging.info("is appear{}".format(description))
 25                 return True
 26         except:
 27             logging.exception("is not appear{}".format(description))
 28             self.screen_shot(path,description)
 29             raise
 30 
 31 
 32     #查找匹配 依赖flag_loc规则
 33     def find_match(self,pattern,description,path,name=None,flag_loc=None):
 34         """
 35         :param pattern:  要找区域
 36         :param description: 描述
 37         :param path: 图片保存的位置
 38         :param name: 参照描述
 39         :param flag_loc: 参照区域
 40         :return:
 41         """
 42         """根据flag_loc值判断是否需要参照区域"""
 43         if flag_loc and name is None:
 44             try:
 45                 if self.lackey.find(pattern):
 46                     logging.info("is find  {}".format(description))
 47                     return True
 48                 else:
 49                     logging.info("is not find  {}".format(description))
 50                     return False
 51             except:
 52                 logging.exception("find {} fail !!!".format(description))
 53                 self.screen_shot(path,description)
 54                 raise
 55         else:
 56             """否则先等待参照区域显现"""
 57             try:
 58                 if self.wait_appear(pattern=flag_loc,description=name,path=path):
 59                     try:
 60                         if self.lackey.find(pattern):
 61                              return True
 62                         else:
 63                             logging.info("is not find  {}".format(description))
 64                     except:
 65                         logging.exception("find {} fail !!!".format(description))
 66                         self.screen_shot(path, description)
 67             except:
 68                 logging.exception("wait {} goal fail!!!".format(name))
 69                 self.screen_shot(path, name)
 70                 raise
 71 
 72     # 点击 依赖是否需要time等待
 73     def click_left(self,pattern,description,path,timeFlag):
 74         """
 75         :param pattern:  要找区域
 76         :param description: 要找区域描述
 77         :param path: 图片保存位置
 78         :param timeFlag: 给等待时间
 79         :return:
 80         """
 81 
 82         if timeFlag is None:
 83             try:
 84                 self.lackey.click(pattern)
 85             except:
 86                 logging.exception("click {} fail!!!".format(description))
 87                 self.screen_shot(path,description)
 88                 raise
 89         else:
 90             try:
 91                 time.sleep(timeFlag)
 92                 self.lackey.click(pattern)
 93             except:
 94                 logging.exception("click {} fail!!!".format(description))
 95                 self.screen_shot(path,description)
 96                 raise
 97     # 按照偏移量进行点击操作
 98     def click_targetOffset(self,pattern,description,path,timeFlag,x,y):
 99         """
100         :param pattern:  要找区域
101         :param description: 要找区域描述
102         :param path: 图片保存位置
103         :param timeFlag: 给等待时间
104         :param positon: 坐标x,y
105         :return:
106         """
107         if timeFlag is None:
108             try:
109                 self.lackey.click(lackey.Pattern(pattern).targetOffset(x,y))
110             except:
111                 logging.exception("click {} fail!!!".format(description))
112                 self.screen_shot(path,description)
113                 raise
114         else:
115             try:
116                 time.sleep(timeFlag)
117                 self.lackey.click(lackey.Pattern(pattern).targetOffset(x,y))
118             except:
119                 logging.exception("click {} fail!!!".format(description))
120                 self.screen_shot(path,description)
121                 raise
122 
123     # 双击 依赖是否需要time等待
124     def doubleClick(self,pattern,description,path,timeFlag):
125         """
126         :param pattern:  要找区域
127         :param description: 要找区域描述
128         :param path: 图片保存位置
129         :param timeFlag: 给等待时间
130         :return:
131         """
132         if timeFlag is None:
133             try:
134                 self.lackey.doubleClick(pattern)
135             except:
136                 logging.exception("dobuleclick {} fail!!!".format(description))
137                 self.screen_shot(path,description)
138                 raise
139         else:
140             try:
141                 time.sleep(timeFlag)
142                 self.lackey.doubleClick(pattern)
143             except:
144 
145                 logging.exception("dobuleclick {} fail!!!".format(description))
146                 self.screen_shot(path,description)
147                 raise
148 
149     # 按照偏移量进行双击操作
150     def doubleClick_targetOffset(self,pattern,description,path,timeFlag,x,y):
151         """
152         :param pattern:  要找区域
153         :param description: 要找区域描述
154         :param path: 图片保存位置
155         :param timeFlag: 给等待时间
156         :param positon: 坐标x,y
157         :return:
158         """
159         if timeFlag is None:
160             try:
161                 self.lackey.doubleClick(lackey.Pattern(pattern).targetOffset(x,y))
162             except:
163                 logging.exception("dobuleclick {} fail!!!".format(description))
164                 self.screen_shot(path,description)
165                 raise
166         else:
167             try:
168                 time.sleep(timeFlag)
169                 self.lackey.doubleClick(lackey.Pattern(pattern).targetOffset(x,y))
170             except:
171                 logging.exception("dobuleclick {} fail!!!".format(description))
172                 self.screen_shot(path,description)
173                 raise
174 
175     # 右键
176     def click_right(self,pattern,description,path,timeFlag):
177         """
178         :param pattern:  要找区域
179         :param description: 要找区域描述
180         :param path: 图片保存位置
181         :param name: 参照描述
182         :param timeFlag: 给等待时间
183         :return:
184         """
185         if timeFlag is None:
186             try:
187                 self.lackey.rightClick(pattern)
188             except:
189                 logging.exception("click {} fail!!!".format(description))
190                 self.screen_shot(path,description)
191                 raise
192         else:
193             try:
194                 time.sleep(timeFlag)
195                 self.lackey.rightClick(pattern)
196             except:
197 
198                 logging.exception("click {} fail!!!".format(description))
199                 self.screen_shot(path,description)
200                 raise
201 
202     # 拖拽 依赖是否需要time等待
203     def drag_appear(self,description,path,name,dragFrom,timeFlag,dragTo=None):
204         """
205         :param description: 要找区域描述
206         :param path: 图片保存位置
207         :param name: 图片描述
208         :param dragFrom: 拖动起始位置
209         :param dragTo: 拽到终止位置
210         :param timeFlag: 给等待时间
211         :return:
212         """
213 
214         if timeFlag is None:
215             try:
216                 self.lackey.dragDrop(dragFrom,dragTo)
217             except:
218                 logging.exception("drag {} fail!!!".format(description))
219                 self.screen_shot(path,name)
220                 raise
221         else:
222             try:
223                 time.sleep(timeFlag)
224                 self.lackey.dragDrop(dragFrom,dragTo)
225             except:
226 
227                 logging.exception("drag {} fail!!!".format(description))
228                 self.screen_shot(path,name)
229                 raise
230     def input(self,description,path,content):
231         try:
232             self.lackey.type(content)
233             logging.info("input {}".format(content))
234         except:
235             logging.exception("input {} fail!!!".format(description))
236             self.screen_shot(path,description)
237             raise
238 
239 
240     # 下拉菜单,菜单区域-菜单选项
241     def selector(self,pattern,name1,loc,description,path,steps,scroll_num):
242         """
243         :param pattern: 菜单区域
244         :param name1: 菜单区域描述
245         :param loc: 菜单选项
246         :param description: 菜单选项描述
247         :param path: 图片保存位置
248         :param steps: 滚动步数
249         :param scrop_num: 滚动次数
250         :return:
251         """
252 
253         try:
254             self.lackey.click(pattern)
255             try:
256                 if self.wait_appear(pattern=loc,description=description,path=path):
257                     try:
258                         self.lackey.click(loc)
259                     except:
260                         logging.exception("click {} fail!!!".format(description))
261                         self.screen_shot(path,description)
262                         raise
263                 else:
264                     for i in range(scroll_num):
265                         self.lackey.wheel(1, steps)
266                         if self.wait_appear(pattern=loc,description=description,path=path):
267                             try:
268                                 self.lackey.click(loc)
269                                 break
270                             except:
271                                 logging.exception("click {} fail!!!".format(description))
272                                 self.screen_shot(path,description)
273                                 raise
274                         logging.info("finding {}".format(description))
275             except:
276                 logging.exception("wait {}is not appear}".format(description))
277                 self.screen_shot(path,description)
278                 raise
279         except:
280             logging.exception("click{} fail!!!".format(name1))
281             self.screen_shot(path,name1)
282             raise
283 
284     #上传文件
285     def upload(self, pattern, file_path, path, description, x,y,positon=None):
286         """
287         :param pattern: 上传区域/参照区域
288         :param file_path: 文件路径
289         :param path: 图片保存位置
290         :param description: 描述
291         :param positon: 决定是否偏移量坐标 x,y
292         :return:
293         """
294         if positon is None:
295             try:
296                 self.lackey.click(pattern)
297 
298                 self.lackey.type(file_path)
299                 time.sleep(1.5)
300                 self.lackey.type("{ENTER}{ENTER}{ENTER}")
301 
302             except:
303                 logging.exception("upload {} fail !!")
304                 self.screen_shot(path, description)
305                 raise
306         else:
307             try:
308                 self.lackey.click(lackey.Pattern(pattern).targetOffset(x,y))
309                 self.lackey.type(file_path)
310                 time.sleep(1.5)
311                 self.lackey.type("{ENTER}{ENTER}{ENTER}")
312             except:
313                 logging.exception("upload {} fail !!")
314                 self.screen_shot(path, description)
315                 raise

以上是一些基本操作,不足之处后续博客会继续完善

这里附上模仿selenium的网页自动化封装分层思想

 

 

标签:exe,description,lackey,pattern,self,param,path,软件
From: https://www.cnblogs.com/chevron123/p/18487025

相关文章

  • 适用于 Windows 11/10/8/7/Vista/XP 的最佳免费分区软件
    无论您使用的是SSD、机械磁盘还是任何类型的RAID阵列,硬盘驱动器都是Windows计算机中不可或缺的组件。在将文件保存到全新磁盘之前,您应该初始化它,创建分区并使用文件系统格式化。在运行计算机一段时间后,您需要收缩、扩展、转换、复制磁盘分区等。可靠的磁盘分区工具可以帮......
  • 153道敏捷软件开发面试八股文(答案、分析和深入提问)整理
    1.您如何确保所有部门都遵循敏捷的思维方式和方法?回答确保所有部门都遵循敏捷的思维方式和方法,可以采取以下几种策略:培养敏捷文化:教育与培训:为团队和部门提供敏捷培训,确保每个成员了解敏捷原则和实践。分享成功案例:定期分享成功的敏捷项目案例,激励其他部门效仿。领......
  • 【开题报告】基于Springboot+vue软件推荐平台(程序+源码+论文) 计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,软件应用已成为人们日常生活和工作中不可或缺的一部分。然而,面对海量的软件资源,用户往往难以快速找到符合自己需求的优质软......
  • win11卸载软件提示没有权限
    如题,win11卸载某软件,提示:没有足够的权限卸载,请与系统管理员联系!解决方法:1.Win键+R键,打开"运行"对话框。输入regedit并按Enter键来启动注册表编辑器。2.打开目录:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System在System键下找到名......
  • QT项目打包成exe文件-非常详细(侧重于解决输出的exe文件没有原项目功能的问题)
    写在前面: 我是研二学生,用qt给老师项目做的一个辅助软件。项目要验收,所以需要打包qt项目成exe文件,但是我死活弄不出来,来回搞了两三天才弄好。特此写下第一篇博客,记录这个过程,并给同样困扰的新手朋友们提供一个方法。我是一个新手,期待大家的批评指正。打包流程: 1、获取初始......
  • 科普文:软件架构数据库系列之【MySQL死锁案例分析:间隙锁“Gap Lock”导致的死锁及解决
    概叙科普文:软件架构数据库系列之【详解MySQL死锁】-CSDN博客科普文:软件架构数据库系列之【MySQL死锁案例分析:index_merge导致的死锁及解决方案ERROR1213(40001):Deadlock】-CSDN博客科普文:软件架构数据库系列之【MySQL死锁案例分析:加锁顺序“循环等待”导致的死锁及解......
  • 知识管理新纪元:推荐十款知识中台搭建软件
    在当今信息爆炸的时代,知识管理已成为企业和个人不可或缺的一部分。一个高效、易用的知识中台,或者说知识库,不仅能提升工作效率,还能促进团队协作和知识共享。本文将为您推荐十款知识中台搭建软件,其中包括HelpLookAI知识库、Confluence、GitBook、Document360、Bloomfire、阿......
  • 【编程入门】BMI.exe
    #include<bits/stdc++.h>usingnamespacestd;intmain(){   doubleh,w,b;   cin>>h>>w;   h/=100;   b=w/(h*h);   if(b>24)   {      cout<<"Toofat!"<<endl;      doublew24=......
  • GoFly框架可以快速且更容易的完成信息及软件开发相关专业同学的毕业论文设计
    前言随着gofly开始开发框架的不断宣传,这段时间有很多软件开发相关专业同学问我们框架是否可以拿来做毕业论文设计技术框架。借助本文给正在选择毕业设计技术或者为将来毕业设计准备的同学介绍一下GoFly框架如何用于毕业设计。介绍之前可以肯定的回答,GoFly框架是完全可以用于毕......
  • Adobe Animate (AN) 多媒体创作和电脑动画程序软件下载安装(附win/mac安装包)
    软件简介AdobeAnimate,简称AN,前身为AdobeFlashProfessional,是Adobe公司开发的一款功能强大的多媒体创作和电脑动画程序。它广泛应用于动画制作、广告制作、游戏开发以及多媒体内容创作等多个领域。AdobeAnimate提供了丰富的绘图工具、动画骨骼工具、时间轴和图层管理等功能......