python进行windows系统UI自动化之【pyautoit】
admin 阅读: 2024-03-22
后台-插件-广告管理-内容页头部广告(手机) |
python进行windows系统UI自动化之【pyautoit】
- 一、AutoIT中文手册
- 1.1、安装AutoIt
- 1.2、使用Auto Window Info
- 二、python引用
- 2.1、安装
- 2.2、引用
- 2.3、使用
- 2.3.1、窗口操作
- 2.3.2、控件操作
- 2.3.3、进程操作
- 2.3.4、鼠标操作
- 2.3.5、键盘操作
- 2.3.5.1、Send 是非常有用的一个函数/命令,因为我们可用它来对窗口进行操作而无需使用鼠标。
- 2.3.5.1.1、例如,先打开 文件夹选项窗口(位于控制面板),然后请尝试执行下面这些语句:
- 2.3.5.1.2、组合 Alt 键使用可访问菜单项,请打开记事本窗口然后尝试执行下面这些语句:
- 2.3.5.1.3、如果您对快捷键(Alt+F4、PrintScreen、Ctrl+C等等)的重要性还不太了解,请查看 Windows 的帮助信息(按下热键 Win+F1即可)以获得关于快捷键的完整列表。
- 三、易报错点
- 3.1 等待页面激活
- 3.2点击
- 3.1 打开文件
- 四、项目所需,所封装的接口demo
- 五、遇到的坑
- 六、WEB UI自动化将AutoIT与Selenium结合
- 七、 Windows PC自动化将AutoIT与Airtest结合
其实,用python进行windows端UI自动化的库有很多,比如pywinauto等,本文介绍一个使用autoit3来实现的 pyautoit 库。
pyautoit 是一个用python写的基于AutoItX3.dll的接口库,用来进行windows窗口的一系列操作,也支持鼠标键盘的操作。
AutoIt现在最新版是V3版本,这是一个类似BASIC脚本语言的免费软件,用于Windows GUI中进行自动化操作。利用模拟键盘按键,鼠标移动,窗口和控件的组合来实现自动化任务,而这是其他语言不可能做到和无可靠方法实现的(例如VBScript和SendKeds)
一、AutoIT中文手册
https://www.autoitx.com/doc/
1.1、安装AutoIt
链接: AutoIt Downloads - AutoIt
下载下图的安装包
解压后运行后第一个界面直接NEXT
1.2、使用Auto Window Info
控件control定位
打开Auto Window Info(x64)或Auto Window Info(x86)
类似于浏览器的F12,使用Finder Tool获取窗口的title等信息
点击上访的图标,进行拖拉,到想访问的位置,注意下图两个红框中的数值,上面的框表示页面的标题和类,下面的框表示控件的类和序号(一般连起来使用)
二、python引用
2.1、安装
pip install pyautoit https://pypi.org/project/PyAutoIt/- 1
- 2
- 3
2.2、引用
import autoit # 注意:引用的模块名跟安装的模块名是不一样的- 1
2.3、使用
启动程序 autoit.run("notepad.exe") run(filename[,work_dir[,show_flag]]): 运行指定程序 filename参数:设置运行的程序的路径和名称 work_dir参数:设置工作路径。默认为windows系统文件夹(C:\Windows) show_flag参数:设置窗口显示的方式。默认为Properties.SW_SHOWNORMAL(窗口正常显示) 可选值: ○ Properties.SW_HIDE: 表示隐藏窗口 ○ Properties.SW_MAXIMIZE: 表示最大化窗口 ○ Properties.SW_MINIMIZE: 表示最小化窗口 run_wait(filename[,work_dir[,show_flag]]): 运行指定程序并暂停脚本执行,直到程序结束- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2.3.1、窗口操作
autoit.win_wait_active(title="无标题- 记事本", timeout=10) # 等待窗口激活 autoit.win_exists("aaa") # 判断窗口是否存在 autoit.win_get_handle("无标题- 记事本") # 获取窗口句柄 autoit.win_activate("bbb") # 激活窗口 autoit.win_close("[CLASS:Notepad]") # 关闭窗口 此处,窗口标题的匹配模式也是可以自定义的,默认是1 -- 匹配开始部分,可以在脚本前面加上以下改为2--匹配子字符串: autoit.opt("WinTitleMatchMode", 2)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2.3.2、控件操作
autoit.control_set_text("无标题", "Edit1", "12312313123") # 输入文字 autoit. control_click(title, control[,button[, clicks[, x[, y]]]]): 对控件进行点击 button参数:设置点击方式。默认为“left”,还可以设置为"right" or "middle" clicks参数:设置点击次数。默认为1次 x: 设置点击的水平位置。默认为center(中心) y: 设置点击的垂直位置。默认为center(中心) autoit.control_get_text(title="title", control="controlid") # 获取控件文本 autoit.control_command(title="title", control="controlid", command="command") autoit.control_list_view(title="title", control="controlid", command="command") autoit.control_tree_view(title="title", control="controlid", command="command")- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2.3.3、进程操作
autoit.process.process_wait(process="process", timeout=10) autoit.process.process_close("process") autoit.process.process_exists("process")- 1
- 2
- 3
2.3.4、鼠标操作
autoit.mouse_click(button='left', x=100, y=200, clicks=1, speed=-1) mouse_click([button[, x, y[, clicks[, speed]]]]): 点击鼠标 button参数:设置点击方式。 默认为“left”, 还可以设置为"right", "middle", "main", "menu", "primary", "secondary" x,y参数:鼠标移动的位置。不传参表示在鼠标当前位置点击 clicks: 设置鼠标点击次数 speed: 设置鼠标移动的速度。默认-1,速度范围为[1, 100],1最快,100最慢 autoit.mouse_move(x=200, y=300, speed=-1) mouse_move(x, y[, speed]) autoit.mouse_wheel(direction="down")- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2.3.5、键盘操作
autoit.send("12312412") autoit.send("+{F10}") # 发送shift+F10(右键效果) autoit.send("^a") # 发送ctrl+a- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
2.3.5.1、Send 是非常有用的一个函数/命令,因为我们可用它来对窗口进行操作而无需使用鼠标。
2.3.5.1.1、例如,先打开 文件夹选项窗口(位于控制面板),然后请尝试执行下面这些语句:
Send("{TAB}") 切换到(焦点切换)下一个控件(按钮、复选框等) Send("+{TAB}") 切换到上一个控件 Send("^{TAB}") 切换到下一个窗口标签 Send("^+{TAB}") 切换到上一个窗口标签 Send("{SPACE}") 可用来切换复选框的选中状态或点击某个按钮 Send("{+}") 通常用来选中某个复选框(如果它“确实是”复选框的话) Send("{-}") 通常用来取消选中某个复选框 Send("{NumPadMult}") 完全展开 SysTreeView32 控件内显示的文件夹- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.3.5.1.2、组合 Alt 键使用可访问菜单项,请打开记事本窗口然后尝试执行下面这些语句:
Send("!f") 发送 Alt+f,这是打开记事本的文件菜单的快捷键,您还可以试试其它的! Send("{DOWN}") 移动焦点到下一个菜单项 Send("{UP}") 移动焦点到上一个菜单项 Send("{LEFT}") 切换到左边的菜单或收缩子菜单 Send("{RIGHT}") 切换到右边的菜单或展开子菜单- 1
- 2
- 3
- 4
- 5
2.3.5.1.3、如果您对快捷键(Alt+F4、PrintScreen、Ctrl+C等等)的重要性还不太了解,请查看 Windows 的帮助信息(按下热键 Win+F1即可)以获得关于快捷键的完整列表。
Send 命令(无标志参数) 键击结果 {!} ! {#} # {+} + {^} ^ {{} { {}} } {SPACE} 空格 {ENTER} 主键盘区的 回车键 {ALT} ALT {BACKSPACE} 或 {BS} 退格 {DELETE} 或 {DEL} 删除(DELETE) {UP} 向上箭头 {DOWN} 向下箭头 {LEFT} 向左箭头 {RIGHT} 向右箭头 {HOME} HOME {END} END {ESCAPE} 或 {ESC} ESC键 {INSERT} 或 {INS} INS(Insert) {PGUP} PGUP(PageUp) {PGDN} PGDN(PageDown) {F1} - {F12} 功能键 {TAB} TAB {PRINTSCREEN} PRINTSCREEN {LWIN} 左徽标键 {RWIN} 右徽标键 {NUMLOCK} NUMLOCK {CTRLBREAK} Ctrl+Break {PAUSE} PAUSE {CAPSLOCK} CAPSLOCK {NUMPAD0} - {NUMPAD9} 数字键盘上的 数字键 {NUMPADMULT} 数字键盘上的 乘号 {NUMPADADD} 数字键盘上的 加号 {NUMPADSUB} 数字键盘上的 减号 {NUMPADDIV} 数字键盘上的 除号 {NUMPADDOT} 数字键盘上的 点号 {NUMPADENTER} 数字键盘上的 回车键 {APPSKEY} Windows 应用程序键 {LALT} 左 ALT 键 {RALT} 右 ALT 键 {LCTRL} 左 CTRL 键 {RCTRL} 右 CTRL 键 {LSHIFT} 左 Shift 键 {RSHIFT} 右 Shift 键 {SLEEP} 系统休眠(SLEEP)键 {ALTDOWN} 按住 ALT 键直到发送 {ALTUP} 为止 {SHIFTDOWN} 按住 SHIFT 键直到发送 {SHIFTUP} 为止 {CTRLDOWN} 按住 CTRL 键直到发送 {CTRLUP} 为止 {LWINDOWN} 按住左徽标键直到发送 {LWINUP} 为止 {RWINDOWN} 按住右徽标键直到发送 {RWINUP} 为止 {ASC nnnn} 发送 ALT+nnnn 组合键 {BROWSER_BACK} 仅支持2000/XP:按下浏览器中的“后退”按钮 {BROWSER_FORWARD} 仅支持2000/XP:按下浏览器中的“前进”按钮 {BROWSER_REFRESH} 仅支持2000/XP:按下浏览器中的“刷新”按钮 {BROWSER_STOP} 仅支持2000/XP:按下浏览器中的“停止”按钮 {BROWSER_SEARCH} 仅支持2000/XP:按下浏览器中的“搜索”按钮 {BROWSER_FAVORITES} 仅支持2000/XP:按下浏览器中的“收藏夹”按钮 {BROWSER_HOME} 仅支持2000/XP:运行浏览器并转到主页 {VOLUME_MUTE} 仅支持2000/XP:切换系统静音状态 {VOLUME_DOWN} 仅支持2000/XP:减小系统音量 {VOLUME_UP} 仅支持2000/XP:增大系统音量 {MEDIA_NEXT} 仅支持2000/XP:在播放器中选择播放下一个轨道(影音媒体) {MEDIA_PREV} 仅支持2000/XP:在播放器中选择播放上一个轨道 {MEDIA_STOP} 仅支持2000/XP:使播放器停止播放 {MEDIA_PLAY_PAUSE} 仅支持2000/XP:使播放器播放/暂停 {LAUNCH_MAIL} 仅支持2000/XP:运行邮件客户端程序 {LAUNCH_MEDIA} 仅支持2000/XP:运行播放器(Media player) {LAUNCH_APP1} 仅支持2000/XP:运行用户程序1(我的电脑) {LAUNCH_APP2} 仅支持2000/XP:运行用户程序2(计算器)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
三、易报错点
3.1 等待页面激活
autoit.win_wait_active("[CLASS:Notepad]", 3)#等待3秒 #常用于切换页面后,最好加上,不然容易报错window/control cannot find- 1
- 2
3.2点击
#用标题或者类名表示当前页面,一般两个方法通用 #如果报错window/control cannot find,可以尝试换一种方法表示 autoit.control_click("[CLASS:Notepad]", "Button2") autoit.control_click("*无标题 - 记事本", "Button2")- 1
- 2
- 3
- 4
3.1 打开文件
一般以我们平时操作,会从下图上方的地址栏进行操作,这里注意可以直接从下方的文件名处,输入对应的绝对地址,如:F:\程序设计书籍\《啊哈!算法》.pdf
- 1
四、项目所需,所封装的接口demo
import autoit class MyPyAutoIt(object): @staticmethod def open_exe(title, exe_path, timeout=30): ''' 打开软件并等待加载完成,窗口最大化 :return: ''' try: autoit.run(exe_path) autoit.win_wait_active(title, timeout) autoit.win_set_state(title, flag=autoit.autoit.Properties.SW_MAXIMIZE) except Exception as e: print(e) print('软件打开失败') exit(1) @staticmethod def send_keys(title, control, text): ''' 指定输入框输入文本 :param title: 主窗口标题 :param control: 对应的控件的ClassnameNN :param text: 要输入的文本 :return: ''' autoit.control_click(title, control) time.sleep(0.1) # 复制 pyperclip.copy(text) # ctrl + v autoit.send('{CTRLDOWN}') autoit.send('{v down}') autoit.send('{v up}') autoit.send('{CTRLUP}') @staticmethod def control_click(title, control): ''' 点击该打开软件的某个控件 :param title: 主窗口标题 :param control: 对应的控件的ClassnameNN :return: 返回点击控件后的界面的text control对 ''' autoit.control_click(title, control) if title == 'xxxxxx': time.sleep(2) return MyPyAutoIt.get_dic(title) @staticmethod def control_click_no_wait(title, control): ''' 点击该打开软件的某个控件 :param title: 主窗口标题 :param control: 对应的控件的ClassnameNN :return: 返回点击控件后的界面的text control对 ''' autoit.control_click(title, control) @staticmethod def close_notice_window(title='提示', control=None, timeout=10): ''' 点击该打开软件的提示窗口的某个控件 :param title: 提示窗口标题 :param control: 对应的控件的ClassnameNN :param timeout: 超时时间 :return: ''' def close_inform(): autoit.send('{TAB}') autoit.send('{TAB}') autoit.send('{SPACE}') autoit.send('{TAB}') autoit.send('{SPACE}') autoit.send('{TAB}') autoit.send('{TAB}') autoit.send('{SPACE}') autoit.send('{TAB}') autoit.send('{SPACE}') autoit.send('{SPACE}') autoit.send('{SPACE}') try: if title == '提示': autoit.win_wait_active(title, timeout) autoit.control_click(title, control) elif title == '告知书': autoit.win_wait(title, timeout) autoit.mouse_click(x=800, y=400) # 点击告知书提示框使其被选中 close_inform() autoit.send('{SPACE}') autoit.send('{SPACE}') except Exception as e: print('{}窗口关闭失败, msg : {}'.format(title, str(e))) @staticmethod def ca_login(title='FormAccountPassword', psw_input_control=None, login_control=None, timeout=10): ''' 增值税 一般纳税人 进入该表时要用CA密码验证 :param title: :param psw_input_control: :param login_control: :param timeout: :return: ''' autoit.win_wait_active(title, timeout) MyPyAutoIt.send_keys(title, psw_input_control, 'xxxxxx') MyPyAutoIt.control_click(title, login_control) @staticmethod def get_username(title, username_list): ''' 获得账号名和对应的control组成的dict :param title: :param username_list: 账号(公司全称)构成的list :return:dict, key为公司全称, value为对应的control ''' dic = {} for key, value in MyPyAutoIt.get_dic(title).items(): if key in username_list: dic[key] = value return dic @staticmethod def get_dic(title): ''' :param title: :param control :要获取的控件的Class :return: 由text和对应的control组成的字典, key:text, value:control ''' static_control = 'WindowsForms10.STATIC.app.0.33c0d9d' button_control = 'WindowsForms10.BUTTON.app.0.33c0d9d' edit_control = 'WindowsForms10.EDIT.app.0.33c0d9d' def get_d(control_str, n=500): d = {} for s in (control_str + str(i) for i in range(1, n)): try: key = autoit.control_get_text(title, s) if key == '': continue elif key in d.keys(): if isinstance(d[key], list): d[key] = d[key].append(s) else: d[key] = [d[key], s] else: d[key] = s except autoit.autoit.AutoItError: continue return d return dict(get_d(static_control), **get_d(button_control), **get_d(edit_control)) @staticmethod def get_text_control(title): ''' 获取该界面中的text和其对应的control :param title: 窗口标题 :return: 由text和对应的control组成的字典, key:text, value:control ''' return MyPyAutoIt.get_dic(title) @staticmethod def switch_account(title, username, username_list): ''' 切换账号 :param title: 主窗口标题 :param username_list: 公司全称列表 :param username: 要切换的公司全称 :return: ''' dic = MyPyAutoIt.get_username(title, username_list) return MyPyAutoIt.control_click(title, dic[username]) @staticmethod def get_check_result(title, timeout=2): ''' 获取审核结果 :param title: :param timeout: :return:返回审核结果 ''' autoit.win_wait_active(title, timeout) return autoit.win_get_text(title) @staticmethod def exit_table(title, control='WindowsForms10.BUTTON.app.0.33c0d9d1', timeout=5): ''' 返回上一级,返回税表的上一级(提示要保存表格数据时,默认不保存) :param title: :param control: :param timeout: :return: ''' MyPyAutoIt.control_click(title, control) try: autoit.win_wait_active('提示', timeout) MyPyAutoIt.control_click('提示', 'Button2') except autoit.autoit.AutoItError: pass @staticmethod def get_text_by_control(title, control): ''' 根据给定的control 获取对应的text :param title: :param control: :return: ctrl对应的text ''' return autoit.control_get_text(title, control) @staticmethod def screen_capture(title, control, text=''): ''' 对相应的控件截图 :param title: :param control: :param text: :return: ''' left, top, right, bottom = autoit.control_get_pos(title, control, text) img = ImageGrab.grab((left, top, right, bottom)) img.show()- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
五、遇到的坑
- 在等待窗口出现时,比较了try和while方法,觉得还是while方法比较方面和好用,尤其是你将等待出现的窗口可能有好几种不同的窗口时,用while+if就很方便。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
六、WEB UI自动化将AutoIT与Selenium结合
# Writer:Taka from selenium import webdriver from time import sleep from selenium.webdriver.common.action_chains import ActionChains import os from tools.Hightlightelement import heighLightElement driver = webdriver.Chrome() driver.get("https://sahitest.com/demo/php/fileUpload.htm") sleep(2) ele = driver.find_element_by_id('file') heighLightElement(driver,ele) ActionChains(driver).click(ele).perform() sleep(2) os.system(r'D:\PYFILE\PycharmProjects\UI_automation\tools\test.exe') sleep(3) driver.quit()- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
七、 Windows PC自动化将AutoIT与Airtest结合
''后续介绍
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |