『與善仁』Appium基礎 — 24、等待activity出現

繁華似錦Fighting發表於2021-12-12

1、什麼是等待activity出現

在啟動APP的時候,要配置包名和啟動名,一個啟動名對應一個頁面,也就是啟動APP然後開啟某一個頁面。換句話說,在等待這個頁面出現,也就是等待activity出現。(activity相當於啟動名)

如果不等待頁面完全展示,就直接做下一步點選操作,經常會報錯,於是我們會在啟動完成的時候加sleep。(同Web自動化類似)

那麼問題來了,這個sleep時間到底設定多少合適呢?

設定長了,就浪費時間,設定短了,就會找不到元素報錯了。

這個時候我們可以用wait_activity的語法,等到你想點選的頁面activity出現了,再點選,可以有效的節省時間。

(同Selenium中的顯示等待和隱式等待相關內容)

2、wait_activity()方法

wait_activity()方法是Android特有的,入下所示:

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

# 返回的True 或 False :

說明:

等待指定的activity出現直到超時,interval為掃描間隔1秒,即每隔幾秒獲取一次當前的activity

Agrs引數:

  • activity:需等待的目標 activity (相當於啟動名,就填寫啟動名)
  • timeout:最大超時時間,單位是s 。
  • interval:迴圈查詢時間 。

呼叫方式:driver.wait_activity(‘.activity.xxx’,5,2)

3、獲取當前頁面的activity方法

獲取當前頁面的activity方法為:current_activity

呼叫方式:driver.wait_activity(".Settings$DisplaySettingsActivity", 10 , 2 )

4、綜合練習

"""
1.學習目標
    熟悉等待activity出現的方法
2.操作步驟
    2.1 獲取當前頁面的activity
        driver.current_activity
    2.2 等待activity出現
        driver.wait_activity(activity,最大等待時間,interval=1)
        引數說明:
            activity:需等待的目標 activity (相當於啟動名,就填寫啟動名)
            timeout:最大超時時間,單位是s
            interval:迴圈查詢時間
3.需求
    操作設定app,實現上面方法的使用。
"""

# 1.匯入appium
import time

from appium import webdriver

# 2.新增啟動引數
desired_caps = {
    "platformName": "Android",  # 系統名稱
    "platformVersion": "7.1.2",  # 系統版本
    "deviceName": "127.0.0.1:21503",  # 裝置名稱
    "appPackage": "com.android.settings",  # APP包名
    "appActivity": ".Settings"  # APP啟動名
}

# 3.啟動APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP
# 4.1 設定app點選顯示按鈕
view = driver.find_element_by_android_uiautomator('new UiSelector().text("顯示")')
view.click()

# 4.2 獲取顯示頁面的activity
# activity = driver.current_activity
# print(activity)
# 注意:
# 這步能夠獲取到顯示頁面的activity,
# 證明顯示頁面的activity已經出現了。
# 在這裡我們就先獲取到列印出來檢視一下。
# 也方便我們下一步.wait_activity()方法的使用。
# 在實際的程式碼中我們可以註釋掉,不執行。


# 4.3 等待顯示頁面activity出現
driver.wait_activity(".Settings$DisplaySettingsActivity", 10)

# 4.4 點選顯示頁面的桌布按鈕
driver.find_element_by_android_uiautomator('new UiSelector().text("顯示大小")').click()

# 5.關閉APP
time.sleep(5)
driver.quit()

相關文章