概述
一.场景需求
现在的很多App都采用验证码登录,或者获取本机号码一键登录,但做自动化时机子设备不一定有SIM卡,前端人员也无数据库权限,无法获取到发出的验证码。但在测试环境,开发为了方便测试,还是会预留密码登录的入口,做法就是点击欢迎登录的标题6下,但连续点击有时间限制,太慢出不来。
思路:初学appium,以为使用click()方法,再用for循环连续点击6下即可出来,但还是太天真了,前一晚在自己电脑模拟器使用还可以,到了办公电脑的真机和模拟器就不管用了。连续点击的时间基本都超过了6秒。可能appium封装的这个点击事件,从发起请求到机器执行再到结果返回,时间略长。
然后就想着直接使用cmd命令操作,使用adb shell 命令“adb shell input tap 100 100”,但是该命令也是需要appium发送一条执行,路径长时间长,且不可设置点击间隔。失败告终
最后想到,adb monkey 发送伪随机用户事件操作时速度很快而且执行间隔可设置。但是monkey脚本需要push到设备上才可以执行。虽然盲目但总得一试,没想到该方法在几台设备上均可以成功。以下为代码
此处为生成脚本文件并直接执行,还没做异常处理
# 封装简单的业务基本操作代码
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)
此处代码为获取点击坐标及函数调用
# 获取坐标点击位置函数
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中无法实现短时快速点击解决方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复