• 【转载】appium+python自动化-首次打开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
    
    # 作者:上海-悠悠 QQ交流群:512200893
    
    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):
        '''
        作者:上海-悠悠 QQ交流群:512200893
        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/yoyoketang/p/9042096.html
  • 相关阅读:
    转:[windows]DOS批处理添加任务计划
    转:winform_webApiSelfHost及 OWIN WebAPI Service
    Ubuntu上将终端安装到右键上
    Ubuntu上安装VMware tools
    OpenStack中的rabbitmq的配置方法
    centos上的grub文件修改
    centos7上安装0penStack
    怎样使用yum安装OpenStack
    epel扩展库的安装
    centos7上修改主机名
  • 原文地址:https://www.cnblogs.com/mumuluo/p/14546280.html
Copyright © 2020-2023  润新知