appium简明教程(11)——使用resource id定位(仅支持安卓4.3以上系统)

摘要:
实际上appium的控件定位方式是完全遵守webdriver的mobile扩展协议的。这一节将分享一下如何使用resourceid来定位android策略。什么是resourceid,这个不属于本文的范畴,大家可以点这里了解。这也是原生的webdriver定义的方法,不过竟然在appium的官方文档里没有提及,属于隐藏技;使用find_elements_by_android_uiautomator的方式;关于uiautomator定位后面的教程会展开讲解;从上面的代码片段可以看到,使用find_element_by_id的方式进行定位是最简便的。该按钮的id是com.android.calculator2:id/digit6。先卖个关子,下下一节乙醇将会带大家写第一个appium的测试用例。

上一节乙醇带大家了解了appium的定位策略。实际上appium的控件定位方式是完全遵守webdriver的mobile扩展协议的。

这一节将分享一下如何使用resource id来定位android策略。

什么是resource id,这个不属于本文的范畴,大家可以点这里了解。

我们可以有两种方式来使用resource id进行定位:

  • 使用findElement(By.id("resourceId"))的方式。这也是原生的webdriver定义的方法,不过竟然在appium的官方文档里没有提及,属于隐藏技;

  • 使用find_elements_by_android_uiautomator('new UiSelector().resourceId("the_id")')的方式;关于uiautomator定位后面的教程会展开讲解;

从上面的代码片段可以看到,使用find_element_by_id的方式进行定位是最简便的。

那么怎么获取控件的resource id呢,使用uiautomatorviewer就可以了。具体方法如下图所示。

appium简明教程(11)——使用resource id定位(仅支持安卓4.3以上系统)第1张

现在就以上图所示的android原生计算器程序为例,看一下每种语言是如何实现点击【9】这个按钮的。

目的

点击计算器上的【9】这个按钮。该按钮的id是com.android.calculator2:id/digit6。先甜后苦,从ruby开始。

本文版权归乙醇所有,欢迎转载,但请注明作者与出处,严禁用于任何商业用途

Ruby篇

require 'appium_lib'
caps   = { caps:       { platformName: 'Android', appActivity: '.Calculator', appPackage: 'com.android.calculator2'},
           appium_lib: { sauce_username: nil, sauce_access_key: nil, debug: true} }
dr =Appium::Driver.new(caps).start_driver
dr.find_element(id: 'com.android.calculator2:id/digit9').click

Python篇

#coding:utf-8
from appium importwebdriver
from time importsleep
desired_caps ={}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['app'] = 'Calculator.apk'
desired_caps['appPackage'] = 'com.android.calculator2'
desired_caps['appActivity'] = '.Calculator'
dr = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
sleep(3)
dr.find_element_by_id('com.android.calculator2:id/digit9').click()

Java篇

//新建一个FindById类位于info.itest.www package下面
packageinfo.itest.www;
importio.appium.java_client.AppiumDriver;
importjava.net.MalformedURLException;
importjava.net.URL;
importorg.openqa.selenium.remote.CapabilityType;
importorg.openqa.selenium.remote.DesiredCapabilities;
public classFindById {
    public static void main(String args[]) throwsMalformedURLException {
        DesiredCapabilities cap = newDesiredCapabilities();
        cap.setCapability(CapabilityType.BROWSER_NAME, "");
        cap.setCapability("platformName", "Android");
        cap.setCapability("deviceName", "Android Emulator");
        cap.setCapability("platformVersion", "4.4");
        cap.setCapability("appPackage", "com.android.calculator2");
        cap.setCapability("appActivity", ".Calculator");
        AppiumDriver dr = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);
        dr.findElement(By.id("com.android.calculator2:id/digit9")).click();
    }
}

如果读者对webdriver很熟悉的话,那么掌握这个方法是非常简单的。如果对webdriver不熟悉,那么可以参考乙醇的webdriver实用指南,先学习一下webdriver的基础知识。

这一节我们写了一些脚本去进行控件定位,在实际的项目中,这些没有任何断言的脚本是基本上无法完成测试用例的功能的。

先卖个关子,下下一节乙醇将会带大家写第一个appium的测试用例。

那么下一节我们将学习如何使用class name进行定位。

本文版权归乙醇所有,欢迎转载,但请注明作者与出处,严禁用于任何商业用途

免责声明:文章转载自《appium简明教程(11)——使用resource id定位(仅支持安卓4.3以上系统)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇摸索WSS的service pack包的构成linux下find查找命令用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 检查设备是否存在 导航栏 NavigationBar

http://blog.csdn.NET/lnb333666/article/details/41821149 目前也没有可靠的方法来检查设备上是否有导航栏。可以使用KeyCharacterMap.deviceHasKey来检查设备上是否有某些物理键,比如说菜单键、返回键、Home键。然后我们可以通过存在物理键与否来判断是否有NavigationBar(一...

安卓开发之mqtt协议

首先物联网协议mqtt协议是基于tcp/ip协议的,使用了官方的mqttclient框架/**初始化mqttclient*/private void init() { try { //MQTT的连接设置 options = new MqttConnectOptions(); /...

用selenium 自动爬取某一本小说章节及其内容,并存入数据库中

1 from selenium import webdriver 2 import pymysql 3 from selenium.webdriver.support.ui import WebDriverWait # 等待 4 from selenium.webdriver.support import expected_conditi...

android studio里面怎么看file explorer啊?

1、打开DDMS ,不同的android studio 外观上有所不同,DDMS哪里打开呢? 如图,在“Tools”菜单下点击“Android”,找到“Android Device Monitor”。 2 点击“Android Device Monitor”,就可以打开DDMS啦。 2、先点击DDMS,在工具栏Window——>show...

Selenium模拟操作中按钮点击(click) 失效解决方法

在使用selenium模拟操作时经常遇到一些使用原始方法解决不了的问题。 click失效问题 曾经多次遇到元素click()失败的情况,经典的例子就是某网站的登录框。 一般遇到click失败时我的一般处理方法是改用send_keys(Keys.ENTER),直接用发回车键,简单粗暴。 但是某网站的登录框,直接定位按钮元素click无效,发送回车键也无效,分...

Android之最简单的ImageView加边框方法

通常情况下,如果我们要给ImageView加上边框,比如宽为3dp的灰色框,是自己定义一个MyImageView类,继承自ImageView,在其onDraw方法中画canvas。 还有设置一个带有边框的背景图片的方法。   这里给出一种简单方法,既不需要创建衍生的类,也不需要准备图片。采用xml定义的方式实现。 背景定义xml: bg_border.xm...