51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1998|回复: 3
打印 上一主题 下一主题

[Appium] 【转帖】appium简明教程 11 – 使用resource id定位

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-7-12 13:51:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
什么是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篇CODE:
1
2
3
4
5
6
7
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::river.new(caps).start_driver

dr.find_element(id: 'com.android.calculator2:id/digit9').click

Python篇CODE:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
#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('[color=rgb(42, 0, 255) !important]http://localhost:4723/wd/hub', desired_caps)
sleep(3)

dr.find_element_by_id('com.android.calculator2:id/digit9').click()

Java篇CODE:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//新建一个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("[color=rgb(42, 0, 255) !important]http://127.0.0.1:4723/wd/hub"), cap);

        dr.findElement(By.id("com.android.calculator2:id/digit9")).click();
    }
}

如果读者对webdriver很熟悉的话,那么掌握这个方法是非常简单的。如果对webdriver不熟悉,那么可以参考乙醇的webdriver实用指南,先学习一下webdriver的基础知识。
这一节我们写了一些脚本去进行控件定位,在实际的项目中,这些没有任何断言的脚本是基本上无法完成测试用例的功能的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2017-7-12 17:22:38 | 只看该作者
很详细啊,谢谢啦!
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2020-7-16 17:49
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    3#
    发表于 2017-7-19 17:17:06 | 只看该作者
    啦啦啦啦哈 发表于 2017-7-12 17:22
    很详细啊,谢谢啦!

    你真的假的?我看得一脸懵逼
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-7-16 17:49
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    4#
    发表于 2017-7-19 17:18:45 | 只看该作者
    啦啦啦啦哈 发表于 2017-7-12 17:22
    很详细啊,谢谢啦!

    你是不是水军?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-11 00:56 , Processed in 0.066142 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表