zoukankan      html  css  js  c++  java
  • 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就可以了。这里安静就不给大家演示了。

  • 相关阅读:
    POJ 1703 Find them, Catch them
    POJ 2236 Wireless Network
    POJ 2010 Moo University
    POJ 2184 Cow Exhibition
    POJ 3280 Cheapest Palindrome
    POJ 3009 Curling 2.0
    POJ 3669 Meteor Shower
    POJ 2718 Smallest Difference
    POJ 3187 Backward Digit Sums
    POJ 3050 Hopscotch
  • 原文地址:https://www.cnblogs.com/qican/p/12601298.html
Copyright © 2011-2022 走看看