appium---Activity


  在做自動化的過程中,我們都會發現每次都要從頭開始點,一直要點到最后,如果中間出現錯誤,就需要重現去點,這樣很麻煩也很費時間,今天我們來認識一種非常簡單的方法,想要測試那個頁面,我們就直接跳轉到哪個頁面進行測試。

Activity

Activity是Android系統中的四大組件之一,可以用於顯示View。幾乎所有的Activity都是對於用戶進行交互的,如果還不懂的話,頁面,我們所看到的app中的頁面就屬於一個Activity。其中Android四大組件有Activity,Service服務,Content Provider內容提供,BroadcastReceiver廣播接收器。

言歸正傳,我們繼續說我們的想要每次都啟動到我們想要的頁面,既然前面也說了,每個頁面都表示一個Activity,那么我么可以通過Activity的方式來進入

獲取Activity的方法

通過adb方式獲取Activity

# 通過adb方式獲取Activity # 方法一:
adb shell dumpsys activity top | findstr ACTIVITY # 方法二:
adb shell dumpsys activity | findstr "mFocusedActivity"

# 方法三:
adb shell dumpsys activity activities

通過代碼方式獲取Activity

在代碼中我們可以通過 driver.current_activity 方法獲取

# coding:utf-8
from appium import webdriver
import time
desired_caps = {
                 'platformName': 'Android',  # 測試版本
                 'deviceName': 'emulator-5554',   # 設備名
                 'platformVersion': '5.1.1', # 系統版本
                "appPackage": "com.taobao.taobao",   # app包名
                "appActivity": "com.taobao.tao.welcome.Welcome",   # 啟動launch Activity
                "noReset": True,  # 不清空數據
                "unicodeKeyboard": True,    # 使用Unicode編碼方式發送字符串
                "resetKeyboard": True,      # 鍵盤隱藏起來
                        }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(10)
text = 'text("注冊/登錄")'
driver.find_element_by_android_uiautomator(text).click()
time.sleep(2)
# 獲取頁面activity
a = driver.current_activity
print(a)


----------------結果-----------------------
com.ali.user.mobile.login.ui.UserLoginActivity

通過Activity啟動app對應頁面

前面已經了解到了如何獲取Activity的方法了,接下來我們就要繼續通過Activity直接進入到app對應頁面中

方法一:

直接在desired_caps的配置文件中把appActivity中改成對應的Activity,直接運行代碼

# coding:utf-8
from appium import webdriver
desired_caps = {
                 'platformName': 'Android',  # 測試版本
                 'deviceName': 'emulator-5554',   # 設備名
                 'platformVersion': '5.1.1', # 系統版本
                "appPackage": "com.taobao.taobao",   # app包名
                "appActivity": "com.ali.user.mobile.login.ui.UserLoginActivity",   # 啟動launch Activity
                "noReset": True,  # 不清空數據
                "unicodeKeyboard": True,    # 使用Unicode編碼方式發送字符串
                "resetKeyboard": True,      # 鍵盤隱藏起來
                        }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

方法二:

啟動完App后通過 start_activity 方法直接跳轉到對應app

源碼:

class Activities(webdriver.Remote):
    def start_activity(self, app_package, app_activity, **opts):
        """在測試期間打開任意活動。如果活動屬於
另一個應用程序,啟動該應用程序並打開活動。
這是一個android專用的方法。
參數:
- app_package -包含要啟動的活動的包。
- app_activity -要啟動的活動。
- app_wait_package -啟動此包后開始自動化(可選)。
- app_wait_activity -啟動該活動后開始自動化(可選)。
- intent_action -啟動意圖(可選)。
- intent_category -意圖類別開始(可選)。
- intent_flags -發送到意圖的標志(可選)。
- optional_intent_arguments - intent的可選參數(可選)
- dont_stop_app_on_reset -應用程序應該在重置時停止(可選)?
        """
        data = {
            'appPackage': app_package,
            'appActivity': app_activity
        }
        arguments = {
            'app_wait_package': 'appWaitPackage',
            'app_wait_activity': 'appWaitActivity',
            'intent_action': 'intentAction',
            'intent_category': 'intentCategory',
            'intent_flags': 'intentFlags',
            'optional_intent_arguments': 'optionalIntentArguments',
            'dont_stop_app_on_reset': 'dontStopAppOnReset'
        }
        for key, value in arguments.items():
            if key in opts:
                data[value] = opts[key]
        self.execute(Command.START_ACTIVITY, data)
        return self

 通過源碼可以看出來,需要兩個參數,一個是包名,一個是activity

# coding:utf-8
from appium import webdriver
import time
desired_caps = {
                 'platformName': 'Android',  # 測試版本
                 'deviceName': 'emulator-5554',   # 設備名
                 'platformVersion': '5.1.1', # 系統版本
                "appPackage": "com.taobao.taobao",   # app包名
                "appActivity": "com.taobao.tao.welcome.Welcome",   # 啟動launch Activity
                "noReset": True,  # 不清空數據
                "unicodeKeyboard": True,    # 使用Unicode編碼方式發送字符串
                "resetKeyboard": True,      # 鍵盤隱藏起來
                        }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(10)
# 通過start_activity跳轉 driver.start_activity(
'com.taobao.taobao','com.ali.user.mobile.login.ui.UserLoginActivity')

當然了start_activity不僅可以打開內部的app,如果我們想要調用其他的app也可以打開,直接輸入包名和activity就可以了。這里安靜就不給大家演示了。


免責聲明!

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



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