一.场景需求
现在的很多App都采用验证码登录,或者获取本机号码一键登录,但做自动化时机子设备不一定有SIM卡,前端人员也无数据库权限,无法获取到发出的验证码。但在测试环境,开发为了方便测试,还是会预留密码登录的入口,做法就是点击欢迎登录的标题6下,但连续点击有时间限制,太慢出不来。
思路:初学appium,以为使用click()方法,再用for循环连续点击6下即可出来,但还是太天真了,前一晚在自己电脑模拟器使用还可以,到了办公电脑的真机和模拟器就不管用了。连续点击的时间基本都超过了6秒。可能appium封装的这个点击事件,从发起请求到机器执行再到结果返回,时间略长。
然后就想着直接使用cmd命令操作,使用adb shell 命令“adb shell input tap 100 100”,但是该命令也是需要appium发送一条执行,路径长时间长,且不可设置点击间隔。失败告终
最后想到,adb monkey 发送伪随机用户事件操作时速度很快而且执行间隔可设置。但是monkey脚本需要push到设备上才可以执行。虽然盲目但总得一试,没想到该方法在几台设备上均可以成功。以下为代码
此处为生成脚本文件并直接执行,还没做异常处理
复制代码
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# 封装简单的业务基本操作代码 class ServiceUtils: # 创建脚本文件,并将脚本写入 @staticmethod def psw_entrance_oper(device, x, y): file_name = "{}{}.mks".format(dc.CMDFILE_DIR, device) # 脚本内容,需要拼接点击的坐标 script = """ type=raw events count=10 speed=1.0 start data >> Tap({X}, {Y}) Tap({X}, {Y}) Tap({X}, {Y}) Tap({X}, {Y}) Tap({X}, {Y}) Tap({X}, {Y}) """.format(X=x, Y=y) # 将脚本内容写入文件 with open(file_name, "w") as f: f.write(script) # 将脚本文件推送到设备上 push_file_cmd = "adb -P 5037 -s {} push {} /sdcard".format(device, file_name) # 执行脚本文件,需要执行对应的设备 exec_cmd = "adb -P 5037 -s {} shell monkey -f /sdcard/{}.mks -v -v 1 >C:monkey.txt".format(device, device) os.system(push_file_cmd) os.system(exec_cmd)
此处代码为获取点击坐标及函数调用
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 获取坐标点击位置函数 def get_ele_min_ordin(loc): location = driver.find_element(*loc).location size = driver.find_element(*loc).size print(location) print(size) x_mid = location["x"] + int(size["width"] / 2) y_mid = location["y"] + int(size["height"] / 2) return x_mid, y_mid login_title_mid_ordin = get_ele_min_ordin(login_title_loc) print(datetime.datetime.now()) # 调用连续点击函数 ServiceUtils.psw_entrance_oper("X2P0215C07012968",login_title_mid_ordin[0],login_title_mid_ordin[1]) print(datetime.datetime.now())
初学者,思维不成熟,欢迎探讨,UI自动化还有很多东西要学习,(* ̄︶ ̄)。
最后
以上就是自觉月亮最近收集整理的关于Appium中无法实现短时快速点击解决方法的全部内容,更多相关Appium中无法实现短时快速点击解决方法内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复