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

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

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

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

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

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

现在就以上图所示的 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 import webdriver
from time import sleep

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下面
package info.itest.www;

import io.appium.java_client.AppiumDriver;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class FindById {
    public static void main(String args[]) throws MalformedURLException {
        DesiredCapabilities cap = new DesiredCapabilities();
        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 进行定位。

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


↙↙↙阅读原文可查看相关链接,并与作者交流