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

  • 相关阅读:
    BUUCTF-[GYCTF2020]Blacklist 1 思路
    [强网杯 2019]随便注 WriteUp(three way)思路
    [GXYCTF2019]Ping Ping Ping 1思路
    [ACTF2020 新生赛]Include 思路
    [极客大挑战 2019]Secret File 思路
    [SUCTF 2019]EasySQL 思路
    java环境变量配置 详细
    [极客大挑战 2019]Upload 思路
    [极客大挑战 2019]Http 思路
    [ACTF2020 新生赛]Exec 思路
  • 原文地址:https://www.cnblogs.com/qican/p/12601298.html
Copyright © 2020-2023  润新知