上一节乙醇带大家了解了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就可以了。具体方法如下图所示。

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

目的

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

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

Ruby篇

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

Python篇

  1. #coding:utf-8
  2. from appium import webdriver
  3. from time import sleep
  4.  
  5. desired_caps = {}
  6. desired_caps['platformName'] = 'Android'
  7. desired_caps['platformVersion'] = '4.4'
  8. desired_caps['deviceName'] = 'Android Emulator'
  9. desired_caps['app'] = 'Calculator.apk'
  10. desired_caps['appPackage'] = 'com.android.calculator2'
  11. desired_caps['appActivity'] = '.Calculator'
  12.  
  13. dr = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
  14. sleep(3)
  15.  
  16. dr.find_element_by_id('com.android.calculator2:id/digit9').click()

Java篇

  1. //新建一个FindById类位于info.itest.www package下面
  2. package info.itest.www;
  3.  
  4. import io.appium.java_client.AppiumDriver;
  5. import java.net.MalformedURLException;
  6. import java.net.URL;
  7. import org.openqa.selenium.remote.CapabilityType;
  8. import org.openqa.selenium.remote.DesiredCapabilities;
  9.  
  10. public class FindById {
  11. public static void main(String args[]) throws MalformedURLException {
  12. DesiredCapabilities cap = new DesiredCapabilities();
  13. cap.setCapability(CapabilityType.BROWSER_NAME, "");
  14. cap.setCapability("platformName", "Android");
  15. cap.setCapability("deviceName", "Android Emulator");
  16. cap.setCapability("platformVersion", "4.4");
  17. cap.setCapability("appPackage", "com.android.calculator2");
  18. cap.setCapability("appActivity", ".Calculator");
  19.  
  20. AppiumDriver dr = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);
  21.  
  22. dr.findElement(By.id("com.android.calculator2:id/digit9")).click();
  23. }
  24. }

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

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

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

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

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

appium简明教程(11)——使用resource id定位(仅支持安卓4.3以上系统)的更多相关文章

  1. 转载乙醇大师的appium简明教程

    appium简明教程(11)——使用resource id定位(仅支持安卓4.3以上系统) 乙醇 2014-06-28 21:01 阅读:16406 评论:21 appium简明教程(10)——控件定 ...

  2. appium简明教程

    appium简明教程 什么是appium? 下面这段介绍来自于appium的官网. Appium is an open-source tool you can use to automate mobi ...

  3. appium简明教程(10)——控件定位基础

    狭义上讲,UI级的自动化测试就是让机器代替人去点来点去的过程. 但机器去点什么(点上面还是点左边),怎么点(是长按还是轻触),这些东西是必须由代码的编写者所指示清楚的. 控件定位就是解决机器点什么的问 ...

  4. appium简明教程(8)——那些工具

    那片笑声让我想起我的那些tool 在我生命每个角落静静为我开着 我曾以为我会永远守在她身旁 今天我们已经离去在人海茫茫 她们都老了吧 都更新换代了吧 幸运的是我曾陪她们开发 啦…… 想她 啦…… 她还 ...

  5. appium简明教程(1)——appium和它的哲学世界

    什么是appium? 本文已经迁移到测试教程网,后续更新会在测试教程网更新. 下面这段介绍来自于appium的官网. Appium is an open-source tool you can use ...

  6. duilib教程之duilib入门简明教程11.部分bug

    一.WindowImplBase的bug    在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,    1.最大化按钮的样式还是没 ...

  7. Python 简明教程 --- 11,Python 元组

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 软件工程的目标是控制复杂度,而不是增加复杂性. -- Dr. Pamela Zave 目录 我们在上 ...

  8. appium简明教程(9)——如何获取android app的Activity

    有时候在appium的Desired Capabilities中需要指定被测app的appActivity,下面的方法可能会对你有所帮助. 方法一 如有你有待测项目的源码,那么直接查看源码就好.如果没 ...

  9. appium简明教程(7)——Desired Capabilities详解

    Desired Capabilities在启动session的时候是必须提供的. Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情 ...

随机推荐

  1. Swift语言精要 - Operator(运算符重载)

    运算符重载 Swift的这一语言特性或许应该启发于C++ class Vector2D { var x : Float = 0.0 var y : Float = 0.0 init (x : Floa ...

  2. LintCode: Cosine Similarity

    C++ class Solution { public: /** * @param A: An integer array. * @param B: An integer array. * @retu ...

  3. 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍

    在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...

  4. 一次性解决Intellij IDEA maven 自动跳到1.5的JDK

    说明:文章学习自:https://blog.csdn.net/Zereao/article/details/77427989 一.找到Setting.xml文件 打开setting.xml 说明,该文 ...

  5. Gradle基本使用(1):安装、IDEA使用

    安装配置Gradle Gradle 二进制版下载地址: https://gradle.org/install/ 下载后解压,并将 GRADLE_HOME/bin  添加到系统 path变量,即可:   ...

  6. 把文件(项目)上传到Git@OSC

    说明: 登录与配置git的操作此处忽略. 假设你已配置好git,并且已绑定oschina. 下面是把一个本地文件夹上传到git的操作: 在git@osc上新建项目.记得选择添加对应的 .gitigno ...

  7. linux 命令行cd dvd iso操作

    1 . 制作ISO: $ mkisofs -V LabelName -J -jcharset=utf8 -r -o /home/TargetImage.iso /home/my-data-dir 参数 ...

  8. Flash 加密和破解

    关于Flash(swf),我们需要明确一点: ***Flash字节码的意义都是公开的 所以如果cracker真的有足够的耐心他最终还是可以破解掉你的Flash.我们能做的只是尽量提高Flash被破解的 ...

  9. java 生成jar包并保留注释

      java 生成jar包并保留注释 CreationTime--2018年7月17日08点32分 Author:Marydon 1.选中java项目-->右键-->Export: 2.去 ...

  10. qt坐标系统与布局的简单入门

     qt坐标系统 qt坐标系统比較简单 ); 上面的代码把button显示为父窗体的20,20处宽度为100,高度为100 接下去是布局 qt里面布局须要增加<QLayout.h>这个头 ...