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就可以了。这里安静就不给大家演示了。

原文地址:https://www.cnblogs.com/qican/p/12601298.html