zoukankan      html  css  js  c++  java
  • appium教程_1.基础概念认知

    appium教程_1.基础概念认知

    前言

    官网文档: http://appium.io/docs/cn/about-appium/intro/
    最好自行查阅,一下多为个人总结

    what

    Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用

    说人话就是,appium是用来搞app自动化的,可以来跑ios和android,先看基本架构:


    三个部分
    appium client : 其实就是各种语言的包,通过http协议跟appim-server通信,传达命令
    appium server: 通过npm安装的appium server,通过appium命令启动
    设备: 支持安卓,苹果手机

    how

    server端

    通过appium命令启动server端,最简单就是执行appium,如下:
    image.png
    会默认启动一个4723的端口来等待client的连接
    当然支持各种参数,大家可以通过appium -h来查看
    image.png

    client端

    client端其实就是各种语言,用python为例子

    # 安装client端
    pip install Appium-Python-Client
    
    
    # Android environment
    import unittest
    from appium import webdriver
    
    desired_caps = dict(
        platformName='Android'
        platformVersion='10'
        automationName='uiautomator2'
        deviceName='Android Emulator'
        app=PATH('../../../apps/selendroid-test-app.apk')
    )
    self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    el = self.driver.find_element_by_accessibility_id('item')
    el.click()
    
    

    webdriver.remote就是通过http协议跟server端建立连接,desired_caps参数是指定appium连接的platform,driver;
    然后通过提供的方法来传达指令,如上代码,通过accessibility_id的方式去寻找一个元素,然后点击该元素


    设备

    用安卓手机举例子,需要开启开发者模式,请自行百度开启
    通过usb线连接手机和电脑,执行adb命令来查看手机相关信息,adb全称 android debug bridge,通过电脑端来跟手机进行交互

    adb device 查看连接的设备
    udid是手机的唯一标识,当多台设备的时候,就需要指定udid来识别哪台设备
    
    

    image.png

    连接

    server端:接收client发送的指令请求,转化为可以驱动设备的语言,传递给设备
    client端:主动跟server端建立连接,并发送/接口server端
    设备端:接受指令,在设备上执行动作

    server-设备

    这块的知识还扯不清楚,个人理解如下:
    server端是在电脑上的,然后通过usb线来连接设备(听过可以通过局域网实现无线连接)

    安卓


    安卓有两套deiver,两种底层不一样,这里只讨论最新的UIAutomator2(https://github.com/appium/appium-uiautomator2-server),旧得UIAutomator基本被淘汰了
    UIAutomator2的前提是,安卓设备要是安卓5.0以上,现在的设备都9,10了的,所以目前就这玩意了

    运行原理

    1. client端通过传递desired capabilities给appium server来创建一个session, appium server根据automationName去启动对应的driver,默认是android-driver,如下:
    desired_caps = dict(
        platformName='Android'
        platformVersion='10'
        automationName='uiautomator2'  # 这里就是指定的就是uiautomator2
        deviceName='Android Emulator'
        app=PATH('../../../apps/selendroid-test-app.apk')
    )
    
    1. appium server 就会调用appium-uiautomator2-driver,同时将uiautomator2 server的两个apk安装到测试设备上
      1. io.appium.uiautomator2.server.apk,执行handlers
      2. io.appium.uiautomator2.server.test.apk,只有一个test,用于启动server


    • AppiumServlet ,管理请求的路由,将driver发过来的请求转发给对应Handler.
    • Handler,调用UiAutomator V2去执行指定操作,操作的结果经AppiumResponse统一封装
    • AppiumResponse,操作结果返回给appium-uiautomator2-driver,再将结果返给客户端


    这上面的步骤都是可以通过appium-server的日志看到,也可以通过手机端的应用可以看到,其实安装了三个应用,除了上述的两个还有一个appium setting,用来通过adb命令来设置手机,具体可参考(https://github.com/appium/io.appium.settings

    参考资料

    https://blog.imaginea.com/how-appium-uiautomator2-server-works/
    https://www.jianshu.com/p/d8457a06c7b7
    https://github.com/appium/appium-uiautomator2-server/wiki

  • 相关阅读:
    ActiveMQ
    Solr学习笔记(4) —— SolrCloud的概述和搭建
    Solr学习笔记(3) —— SolrJ管理索引库&集群
    JAVA 平台
    JMS(Java平台上的专业技术规范)
    zookeeper 分布式管理
    java 类型转换
    聚集索引 非聚类索引 区别 二
    聚集索引 非聚类索引 区别
    阶乘
  • 原文地址:https://www.cnblogs.com/jwentest/p/13615955.html
Copyright © 2011-2022 走看看