appium+python自动化47-首次打开app权限弹窗问题

前言

用真机运行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

appium+python自动化47-首次打开app权限弹窗问题的相关文章

Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP

前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itools安装.对于没有iPhone真机的小伙伴,想在iOS模拟器上安装app测试可不是那么容易的事情. 一.启动iOS Simulator 1.Xcode>Open Developer Tool>iOS Simulator,打开后在hardware里面选对应的iPhone版本就能启动模拟器了 2.第二

Appium+python自动化

名称 链接地址 Appium+python自动化8-Appium Python API(上) http://mp.weixin.qq.com/s/WvpT5oRrYY22avI95FuypQ Appium+python自动化8-Appium Python API(下) http://mp.weixin.qq.com/s/rGWWf9m9-6n-J7KaGVlqoA Appium+python自动化9-SDK Manager http://mp.weixin.qq.com/s/wGyfXAwJ9M

appium+python自动化50-生成定位对象模板templet(jinja2)

前言 每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板 python里面生成模板有两个模块可以选择:templet和mako 简单来说,本篇实现的目的是用代码去自动生成代码,做到代码自动化 接着上一篇讲:appium+python自动化49-yaml管理定位元素 jinja2简介 1.jinja2官方文档:官方文档 要了解jinja2,那么需要先理解模板的概念.模板在Python的web开发

Appium + python自动化 - 启动app

各种百度将Appium + python的环境搭建好后,开启移动app自动化的探索(基于Android),首先来记录下如何启动待测的app吧! 如何启动app呢?首先要获取包名,然后获取launcherActivity.获取这两个关键东西的方法有很多,在这里推荐一个sdk自带的实用工具aapt:aapt即Android Asset Packaging Tool,在SDK的build-tools目录下.该工具可以查看apk包名和launcherActivity,当然还有更多的功能,有兴趣的可以查看

appium+python自动化46-安装app三种方式

adb安装 1.在app自动化之前,首先手机上有要被测试的app,如何把电脑本地上的app安装到手机上呢?可以在运行自动化代码前,在cmd输入adb指令,把电脑app安装到手机上 adb install [apk在电脑上的绝对路径] 2.也可以用python执行adb命令安装app,代码实现如下: # coding:utf-8 import os # 安装app,为了方便,把app放到当前脚本同一目录 os.system("adb install baidu.apk") appium本

Appium+Python 自动化测试之二:启动APP(Android篇)

前一篇写了环境安装,这篇记录是记录如何启动APP以及启动APP之前要做哪些事. Appium 启动APP至少需要5个参数,分别是'platformName','platformVersion','deviceName'.'appPackage'.'appActivity' 这几个参数如何得来的呢,下面一步一步为大家讲解 platformName,我们不是要玩Android app自动化测试吗,所以这个platformName值就是android: platformVersion就是Android

Appium+python自动化8-Appium Python API

前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts contexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控件 :Usage: driver.contexts 用法 driver.contexts 2. current_context current_context(self): Returns the cur

Appium+python自动化-Appium Python API

前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts contexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控件 :Usage: driver.contexts 用法 driver.contexts 2. current_context current_context(self): Returns the cur

Appium+python自动化(二)- 环境搭建—下(超详解)

简介 宏哥的人品还算说得过去,虽然很久没有搭建环境了,但是换了新电脑设备,一气呵成,将android的测试开发环境已经搭建准备完毕.上一篇android测试开发环境已经准备好, 那么接下来就是appium的环境安装和搭建了. 嘿嘿!宏哥和小伙伴们开个玩笑,不要觉得自人品不好,就不会成功那都是骗人的.搭建环境和人品半毛钱关系也没有,搭建环境环境安装过程中切勿浮躁,静下心来一个一个慢慢地按照步骤一个个来. 遇到问题解决问题即可.宏哥倒是想遇到问题了,可是问题死活不找宏哥,怕被宏哥KO掉了,当然你们遇