1. 程式人生 > >Appium+python自動化27-等待activity出現(android特有的wait_activity)

Appium+python自動化27-等待activity出現(android特有的wait_activity)

參考 ued 出現 urn nac try _id nts positive

前言

在啟動app的時候,如果直接做下一步點擊操作,經常會報錯,於是我們會在啟動完成的時候加sleep。
那麽問題來了,這個sleep時間到底設置多少合適呢?設置長了,就浪費時間,設置短了,就會找不到元素報錯了。
這個時候我們可以用wait_activity的語法,等到你想點擊的頁面activity出現了,再點擊,可以有效的節省時間。

wait_activity

1.查看源碼

def wait_activity(self, activity, timeout, interval=1):
    """Wait for an activity: block until target activity presents
    or time out.
    
    This is an Android-only method.

    :Agrs:
     - activity - target activity
     - timeout - max wait time, in seconds
     - interval - sleep interval between retries, in seconds
    """
    try:
        WebDriverWait(self, timeout, interval).until(
            lambda d: d.current_activity == activity)
        return True
    except TimeoutException:
        return False

2.解釋說明:

wait_activity(self, activity, timeout, interval=1):

    等待指定的activity出現直到超時,interval為掃描間隔1秒

    即每隔幾秒獲取一次當前的activity
    
    android特有的

    返回的True 或 False

    :Agrs:

     - activity - 需等待的目標 activity

     - timeout - 最大超時時間,單位是s

     - interval - 循環查詢時間

    用法:driver.wait_activity(‘.activity.xxx’,5,2)

獲取current_activity

1.打開app後,先sleep10秒,等app完全啟動完成進入主頁面,然後獲取當前界面的activity

# coding:utf-8
from appium import webdriver
from time import sleep
desired_caps = {
                'platformName': 'Android',
                'deviceName': '127.0.0.1:62001',
                'platformVersion'
: '4.4.2', 'appPackage': 'com.baidu.yuedu', 'appActivity': 'com.baidu.yuedu.splash.SplashActivity' } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) sleep(10) # 獲取當前界面activity ac = driver.current_activity print(ac)

2.運行結果:

技術分享圖片

等待activity

1.用sleep太浪費時間了,並且不知道什麽時候能啟動完成,所以盡量不用sleep

2.上一步已經獲取當主頁面的activity了,那就可以用wait_activity等它出現了,再做下一步的點擊操作

技術分享圖片

3.參考代碼

# coding:utf-8
from appium import webdriver
from time import sleep
desired_caps = {
                'platformName': 'Android',
                'deviceName': '127.0.0.1:62001',
                'platformVersion': '4.4.2',
                'appPackage': 'com.baidu.yuedu',
                'appActivity': 'com.baidu.yuedu.splash.SplashActivity'
                }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

# sleep(10)  # 不用sleep

# 獲取當前界面activity
ac = driver.current_activity
print(ac)

# 等主頁面activity出現,30秒內
driver.wait_activity(".base.ui.MainActivity", 30)

# 點知道了
driver.find_element_by_id("com.baidu.yuedu:id/positive").click()

Appium+python自動化27-等待activity出現(android特有的wait_activity)