Appium基础学习之 | Appium-Desktop元素定位

在《Appium基础学习之 | Appium代码转换为UiAutomator代码Find》提到过Appium1.4.16版本推送到设备端的Bootstrap把元素定位、操作代码转化为UiAutomator代码的过程中,有提到过基础的九种定位方法分别

  • CLASS_NAME("class name")
  • CSS_SELECTOR("css selector")
  • ID("id")
  • NAME("name")
  • LINK_TEXT("link text")
  • PARTIAL_LINK_TEXT("partial link text")
  • XPATH("xpath")
  • ACCESSIBILITY_ID("accessibility id")
  • ANDROID_UIAUTOMATOR(android uiautomator)

到了Appium-Desktop推送一个APK到设备端启动一个Socket服务来接收请求把转化为UiAutomator2.0代码,只支持五种定位

  • CLASS_NAME("class name")
  • ID("id")
  • XPATH("xpath")
  • ACCESSIBILITY_ID("accessibility id")
  • ANDROID_UIAUTOMATOR(android uiautomator)

一、Appium-Desktop Inspector使用

使用Appium-Desktop Inspector之前需要在手机设备端安装好定位的被测应用、得到应用的packageName、ActivityName信息

1.启动Appium Server

2.点击窗口中Start Inspector Session按钮

Appium基础学习之 | Appium-Desktop元素定位_第1张图片

3.然后在Desired Capabilities选项窗口中输入必要信息platformName(平台android)、appPackage(包名)、appActivity(主Activity名)、deviceName(设备名,可随意取),输入后右边框内会自动生成JSON串

Appium基础学习之 | Appium-Desktop元素定位_第2张图片

4.点击Start Session按钮会发生下面一系列事情

(1)Capabilities中没有指定automationName为uiautomator2

a.根据配置的信息创建一个Session

b.完成了Appium Server机器上4724端口转发到设备的4724端口

c.推送Bootstrap.jar到设备端启动一个socket服务监听4724端口

d.然后发送一个请求/wd/hub/session/6794b707-d02c-478d-9dcb-183e99955d87/source,得到应用当前窗口中的布局内容展示出来

不指定automationName为uiautomator2很明显走的就是Appium1.4.16之前的流程去完成的操作,具体可以参考《Appium基础学习之 | Appium执行日志流程分析》可以知道做了些什么事情

(2)Capabilities中指定automationName为uiautomator2

指定为uiautomator2走的自然就是Appium-Desktop版本的流程去完成操作,可以参考《Appium基础学习之 | Appium-Desktop日志分析》,到最后也会发送一个请求/wd/hub/session/6794b707-d02c-478d-9dcb-183e99955d87/source得到当前窗口中的布局内容展示出来

Appium基础学习之 | Appium-Desktop元素定位_第3张图片

5.Appium-Desktop Inspector菜单栏

如上图展示了测试应用的页面,要定位元素之前先来看看Appium-Desktop Inspector提供的功能,菜单栏从左到右9个菜单

(1)Select Element元素选择:点击该菜单功能按钮后,在左边的被测应用页面中选择要定位的Element元素,然后在右边的的Selected Element窗口中会显示该元素的所有信息。

(2)swipe滑动:点击该菜单功能按钮后,在左边的被测应用页面中选择要滑动的开始位置,再点击到结束位置,然后会自动完成滑动操作。

(3)Tab选择:点击该菜单功能按钮后,在左边的被测应用页面中选择元素会完成该元素的操作。

(4)Back:返回

(5)Refresh:刷新,在设备中要定位其他页面的元素,在Appium-Desktop Inspector中点击刷新按钮,则会把设备上当前页面的内容展示

(6)Start Recording:录制功能,配合Tab选择可以完成录制脚本,不建议使用。

(7)Search For Element:查找元素,根据不同的元素Locator查找。

(8)Copy XML Source:拷贝页面元素的xml文件,内容是页面元素的信息。

(9)关闭Appium-Desktop Inspector

二、元素定位

通过上面对Appium-Desktop Inspector的介绍,元素定位就简单了,通过Select Element元素选择元素后,然后在右边的Selected Element窗口就可以拿到元素各种定位方式的Value。

1.id

id定位是比较常见的,在Android开发中一个布局文件中id是唯一的,Activity解析引用布局文件中元素时会通过这个唯一的id得到元素对象来完成事件的绑定操作。在定位中,id(resource-id)非常常见的,但需要注意的一点就是id的定位使用必须要大于android API18的操作系统才可使用。

Appium基础学习之 | Appium-Desktop元素定位_第4张图片

AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.findElementById("ymxh.main:id/web_tab").click();

2.Name

name定位与PC上的html的name不同,它定位的是根据在android中对元素的text描述匹配,所以它用的text的值(Appium-Desktop已经不支持name定位

Appium基础学习之 | Appium-Desktop元素定位_第5张图片

3.xpath定位

xpath定位后期想重新再说一遍,因为它的使用也比较常见,在android的元素定位中很容易被忽视的,android开发中如果对控件的信息写的比较模糊时,比如缺少id、accessibility id,并且class的相同,这种场景下,xpath会很实用,但是Appium-Desktop已经放弃这种定位方法。

Appium基础学习之 | Appium-Desktop元素定位_第6张图片

AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.findElementByXPath("//android.widget.RadioButton[@content-desc=\"Web_Auto_Menu\"]").click();

4.accessibility id

accessibility id的定位在元素中并不算常见的,在android开发中需要对控件设置一个android:contentdescription的属性,这个属性主要的作用是协助残疾人士方便操作。

Appium基础学习之 | Appium-Desktop元素定位_第7张图片

AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.findElementByAccessibilityId("Web_Auto_Menu").click();

5.className

className定位也比较常见,但同一个layout布局中很容易会出现相同className的控件,这样的情况下className定位或许就不是最好的选择了

Appium基础学习之 | Appium-Desktop元素定位_第8张图片

AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.findElementByClassName("android.widget.RadioButton").click();

剩下的ANDROID_UIAUTOMATOR(android uiautomator)定位由于不常用,等后面需要用到的时候再详细说。另外Appium-Desktop中使用不支持的name、linkText、partialLinkText、cssSelector四种定位会报错:Locator Strategy 'xxxx' is not supported for this session

你可能感兴趣的:(Appium)