美文网首页python学习
APP自动化:Appium极简上手

APP自动化:Appium极简上手

作者: happyJared | 来源:发表于2018-10-30 17:48 被阅读212次

    Selenium可以操控Web浏览器,手机APP平台也有类似的自动化测试工具:Appium
    全文分基础介绍、环境搭建和案例演示三部分介绍Appium,以帮助Learner快速的上手。

    基础介绍

    Appium是一个开源的自动化测试框架,用于原生,混合和移动Web应用程序。 它使用WebDriver协议驱动iOS,Android和Windows应用程序。关于它的运作流程,用图来介绍会更加生动形象一些:

    Appium运行流程、原理

    在上图中,左边这部分是Appium-Client,通俗点来说,是用于间接驱动最右边的设备执行预定的自动化测试流程,支持使用多种主流的编程语言进行编写,这也是测试开发人员需要关注的核心部分;中间的Appium-Server是衔接左边客户端以及右边APP设备端的重要桥梁,一般仅需要配置好环境及启动运行;右边这块,当然就是实际执行自动化测试的终端,如IOS真机、Android真机,或者是模拟器。

    环境搭建

    • NodeJS

    Appium是使用nodejs实现的,因此Node是解释器,首先要确认安装好

    上述的两种方式都可以搭建Appium-Server环境,后面演示会基于Appium-Desktop。(PS:下载太慢了?分享个百度网盘)

    上述方式可以直接和间接搭建安装Android环境,因为后面要用到adb这个工具,所以需要配置好ANDROID_HOME这个环境变量。(PS:下载太慢了?分享个百度网盘)

    • Appium-Python-Client

    后面会用到Python来编写Appium客户端:pip install Appium-Python-Client

    okay,准备好以上几个环境后,启动Appium测试一下:

    Appium Desktop Server Appium Desktop Server

    案例演示

    下面演示在安卓真机上的自动登录Keep(APP)。

    1. 获取设备名称。操作流程:开启手机的开发和调试模式,连接电脑授权认证,Window + R输入并运行cmd,用adb devices -l查看:
    获取设备号
    1. 启动Appium Server进行调试:
    Inspector Session Desired Capabilities

    从上图可以看到,启动App Session需要有以下几个参数(点击了解更详细的Appium Desired Capabilities):

    • platformName,如AndroidiOS
    • deviceName,参考前面是如何获取的
    • appPackageappActivity,获取参考这里

    综上所述,这里对应Keep的信息如下:

    {
      "platformName": "Android",
      "deviceName": "WAS_AL00",
      "appPackage": "com.gotokeep.keep",
      "appActivity": "com.gotokeep.keep.splash.SplashActivity"
    }
    

    点击Start Session,之后可以看到手机端启动了Keep,并且在Appium Server端中同步展示:

    Start Session Keep

    上述的操作通常只是用来方便获取控件id及定位的,下面基于Python编写完整的Appium-Client以实现自动登录操作:

    from appium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    server = 'http://localhost:4723/wd/hub'  # Appium Server, 端口默认为4723
    desired_capabilities = {
        'platformName': 'Android',
        'deviceName': 'WAS_AL00',  # 需替换成你的deviceName
        'appPackage': 'com.gotokeep.keep',
        'appActivity': 'com.gotokeep.keep.splash.SplashActivity'
    }
    
    driver = webdriver.Remote(server, desired_capabilities)
    wait = WebDriverWait(driver, 10)  # 最大查找等待超时时间:10s
    
    
    def get_permission():
        """允许APP获取的某些权限"""
    
        try:
            ask = wait.until(EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/do_not_ask_checkbox')))
            ask.click()
            allow = wait.until(
                EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/permission_allow_button')))
            allow.click()
        except:
            pass
    
    
    # 允许两项授权
    get_permission()
    get_permission()
    
    # 点击“立即使用”
    welcome = wait.until(EC.presence_of_element_located((By.ID, 'com.gotokeep.keep:id/btn_bottom_in_video_welcome')))
    welcome.click()
    
    # 切换“密码登录”(同样可以使用第三方进行授权登录)
    driver.tap([(900, 110)])
    
    # 输入“手机号”
    phone = driver.find_element_by_accessibility_id('Phone Number In Login')
    phone.send_keys('13988888888')  # 替换成实际的账号
    
    # 输入“密码”
    password = driver.find_element_by_accessibility_id('Password In Login')
    password.send_keys('123456')  # 替换成实际的密码
    
    # 点击“登录”
    login = driver.find_element_by_id('com.gotokeep.keep:id/btn_action')
    login.click()
    

    最后,附上运行效果图:

    效果图

    示例源码
    欢迎关注我的个人公众号:超级码里奥
    如果这对您有帮助,欢迎点赞和分享,转载请注明出处

    相关文章

      网友评论

        本文标题:APP自动化:Appium极简上手

        本文链接:https://www.haomeiwen.com/subject/htwgtqtx.html