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

# 作者:上海-悠悠 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)

在學習過程中有遇到疑問的,可以appium+python QQ群交流:330467341


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM