前言
用真机运行appium代码,首次打开app有的手机会出现权限弹窗问题,一般这种弹窗都是在引导页前面或者引导页后面出现。权限弹窗上面的按钮都是固定的,
只需要定位到“始终允许”按钮,点击确定就可以了。还有一个问题是这种弹窗的个数不确定,有的app是2个有的是3个,为了解决这个问题,可以专门写个判断方法。
注意:模拟器是不会有这种权限弹窗的
环境:
appium 1.8
android 7.0
美团app
权限弹窗
1.以美团app为案例,安装app首次启动的时候,在引导页出现权限弹出框,如下图这种
2.这种弹窗是可以直接定位到的,这里不能通过id去定位了,因为弹窗比较多,每次id都不太一样,但是文本text都是一样的:始终允许
定位系统弹窗
1.通过xpath来定位按钮:始终允许
loc = ("xpath", "//*[@text=‘始终允许‘]")
2.用selenium里面的显示等待模块(WebDriverWait)和判断模块(expected_conditions)封装定位方法,之前selenium教程里面详细讲过,这里就不重复写了
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 判断是否有权限弹窗
for i in range(5):
loc = ("xpath", "//*[@text=‘始终允许‘]")
try:
e = WebDriverWait(driver, 1, 0.5).until(EC.presence_of_element_located(loc))
e.click()
except:
pass
3.写个单独的函数,封装下判断系统权限弹窗,在之前用例前调用一次就可以了
参考代码
# coding:utf-8 from appium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import os import time PATH = lambda x: os.path.join(os.path.dirname(os.path.realpath(__file__)), x) # 百度下载一个美团app,放当前脚本同一目录 print(PATH(‘meituan_626.apk‘)) desired_caps = { ‘platformName‘: ‘Android‘, ‘deviceName‘: ‘127.0.0.1:62001‘, ‘platformVersion‘: ‘7.0‘, ‘app‘: PATH(‘meituan_626.apk‘), ‘appPackage‘: ‘com.sankuai.meituan‘, ‘appActivity‘: ‘com.meituan.android.pt.homepage.activity.Welcome‘, ‘noReset‘: ‘true‘, # ‘resetKeyboard‘: ‘true‘, # ‘unicodeKeyboard‘: ‘true‘ } driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘, desired_caps) time.sleep(3) def always_allow(driver, number=5): ‘‘‘ fuction:权限弹窗-始终允许 args:1.传driver 2.number,判断弹窗次数,默认给5次 其它: WebDriverWait里面0.5s判断一次是否有弹窗,1s超时 ‘‘‘ for i in range(number): loc = ("xpath", "//*[@text=‘始终允许‘]") try: e = WebDriverWait(driver, 1, 0.5).until(EC.presence_of_element_located(loc)) e.click() except: pass if __name__ == "__main__": # 调用始终允许函数 always_allow(driver)
原文地址:https://www.cnblogs.com/jason89/p/9048903.html
时间: 2024-10-03 22:38:57