美文网首页
Appium 选择操作元素

Appium 选择操作元素

作者: 清水秋香 | 来源:发表于2020-02-26 18:23 被阅读0次
    • 概述
      UI自动化,当然包括appium,主要就是干三种事情:
      1选择 界面 元素
      2操作元素(包括输入操作:点击、输入字符、拖拽等。输出操作:获取页面元素的各种属性)
      3根据Appium获取的数据进行分析和处理。

    • 查看appPackage 和 appActivity
      方法一:
      mac

    /usr/local/android-sdk-macosx/build-tools/29.0.3/aapt dump badging /Users/wgz/Desktop/头条app/toutiao.apk
    #包名
    package: name='io.manong.developerdaily'
    #入口名
    name='io.toutiao.android.ui.activity.LaunchActivity'
    

    win

    e:\androidsdk\build-tools\28.0.2\aapt.exe dump badging d:\apk\toutiao.apk
    
    

    方法二:
    如果被测app已经安装在手机上了,可以直接打开手机上该应用,进入到你要操作的界面然后执行:

    adb shell dumpsys activity recents 
    

    会出现N个activity信息,最近的就是我们想要的
    例:
    com=com.anfroid.mms/.ui.ConversationList

    • Appium自动化和Selenium自动化都是界面的自动化操作,所以其原理和操作方式非常相似。
      1⃣️resourse-id:是该元素的资源id,一般来说唯一的决定了一个元素,有点像web的ID,优先根据他查找。
      但是并非每一个元素都会有。如果这样,就需要其他的方法选择
      2⃣️class:就是该元素的类型,这是安卓界面元素对应的代码里的java类,类似html的tag名,比如layout,textview。
      3⃣️package:就是所在app的包名
      4⃣️content-desc:这个属性用来描述该元素的用途,特性等
      5⃣️bounds:就是这个元素在界面上的位置,左上角和右下角的坐标。
      以后如果我们死在找不到元素的时候,就根据这个属性直接去根据坐标操作元素了。

    准备自动化配置信息:

    desired_caps = {
              #移动设备平台
              "platformName":"Android",
              #平台版本号,写整数位即可
              "plathformVerSion":"8",
              #设备的名称--值可以随便写
              "deviceName":"test0106",
              #提供被测app的信息-包名,入口信息
              "appPackage":"xxx",
              "appActivity":"xxx",
              #确保自动化之后不重制app
              "noReset":True,
              #设置session的超时时间,单位秒
              "newCommandTimeout":6000
    }
    
    • 这一行代码发生了什么?
    webdriver.Remote('http://localhost:4723/wb/hub',desired_caps)
    

    1.客户端代码于appiumserver建立连接,并传递caps配置信息
    2.Appiumserver检查配置信息是否符合要求
    3.利用adb工具检查当前连接的移动设备
    4.安装appium-settings与uiautomator2到被测手机(首次运行脚本发生)
    5.手机启动aappium-settings作为监听服务,用于和appium-server进行通信
    6.uiaotumator2启动被测app

    • 选择元素
      选择元素的代码也和Selenium基本相同,如下
      可以通过
      find_element_by_xxx 符合条件的第一个元素,找不到抛出异常
      find_elements_by_xxx 符合条件的所有元素列表,找不到返回空列表
      通过webdriver对象调用这样的方法,查找范围是整个界面的树形结构。
      通过webelement对象调用这样的方法,查找范围是该节点的子节点
    选择元素方式
    • id 例:
      ele = driver.find_elelment_by_id('com.example.jcy.wvtest:id/name1')
      ele.send_keys('hello word')
      但是我们只靠id定位也是远远不够的。
      有的元素没有ID,而且有的时候ID也并非唯一

    • class name
      class树形决定了界面的元素类型。
      通常class就是类似web里面的tagname,所以通常不是唯一的,所以大部分情况,我们根据classname是要选择多个而不是一个。
      如果确定,我们要查找的是某种类型的界面元素,而且这种类型的界面元素在当前界面中只有一个,就可以根据他来查找。
      写法是:
      driver.find_element_by_class_name('android.widget.DatePicker')

    • accessibility id
      content-desc树形是用来描述该元素的作用
      要查询的界面元素content-desc树形在当前界面中唯一我们可以通过他来定位,
      写法:
      driver.find_element_by_accessibility_id('xxx')

    • 元素定位工具补充:Appium的inspector
      该工具可以像浏览器一样在上面验证xpath表达式。
      需要我们手动创建一个session,其实就是一个客户端,和appium server连接
      填入参数,就像代码汇总的,手动填写下面参数,一一对应。
    desired_caps = {
              #移动设备平台
              "platformName":"Android",
              #平台版本号,写整数位即可
              "plathformVerSion":"8",
              #设备的名称--值可以随便写
              "deviceName":"test0106",
              #提供被测app的信息-包名,入口信息
              "appPackage":"xxx",
              "appActivity":"xxx",
              #确保自动化之后不重制app
              "noReset":True,
              #设置session的超时时间,单位秒
              "newCommandTimeout":6000
              #'app':'xxx.apk' 
    }
    
    
    

    相关文章

      网友评论

          本文标题:Appium 选择操作元素

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