原文链接

常用操作

点击操作

通常获取到元素之后,可以调用 click() 方法来实现对这个元素的点击操作。示例代码如下:

  • python 版本
driver.find_element_by_id("home_search").click()

  • Java 版本
driver.findElementById("home_search").click();

输入操作

输入操作示例代码如下:

  • python 版本
self.driver.find_element_by_id("search_input_text").send_keys("阿里巴巴")

  • Java 版本
driver.findElementById("search_input_text").sendKeys("阿里巴巴");

效果展示:

获取元素属性

通过获取到的元素属性信息,可以进行页面数据的验证(断言),或者用于分支判断。

元素有很多属性信息,无论是使用 uiautomatorviewer 还是使用 Appium Inspector,元素的属性信息一般都会展示在页面的右下方。

如下图是 Appium Inspector 的元素定位页面:

可以使用获取元素的属性的方法来获取这些属性信息。然后通过获取到的元素属性值进行断言,也可以获取到复选框是否被选中的状态,或者获取某个元素是否可用等信息。

获取 TEXT 属性

返回元素的 text 的属性值,用法如下:

  • Python 版本
self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android'
).get_attribute('text')
  • Java 版本
driver.findElementByXPath\
"//*[@resource-id=\"com.xueqiu.android\"]").\
getAttribute("text");
获取 CLASS 属性

返回元素的 class 的属性值,用法如下:

  • Python 版本
self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android"]'
).get_attribute('class')
  • Java 版本
driver.findElementByXPath("\
//*[@resource-id=\"com.xueqiu.android\"]")\
.getAttribute("class");
获取 RESOURCE-ID 属性

返回 resource-id 的属性值(API≥18 支持),用法如下:

  • Python 版本
self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android"]'
).get_attribute('resource-id')
  • Java 版本
driver.findElementByXPath\
("//*[@resource-id=\"com.xueqiu.android\"]")\
.getAttribute("resource-id");
获取 CONTENT-DESC 属性

返回元素的 content-desc 的属性值,用法如下:

  • Python 版本
self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android'
).get_attribute('content-desc')
  • Java 版本
driver.findElementByXPath\
("//*[@resource-id=\"com.xueqiu.android\"]")\
.getAttribute("content-desc");
获取元素的其它属性

也可以获取到元素的一些其它的属性,比如这个元素是否可见,是否被选中,是否可用等,下面介绍这些属性值的获取:

  • python 版本
get_attribute('clickable') # 是否可点击
get_attribute('checked') # 是否被选中
get_attribute('displayed') # 是否显示
get_attribute('enabled') # 是否可用
  • Java 版本
getAttribute("clickable");  // 是否可点击
getAttribute("checked"); //是否被选中
getAttribute("displayed"); // 是否显示
getAttribute("enabled"); // 是否可用

获取页面的XML结构

获取页面的 XML 结构,大部分情况是用于页面数据的验证。另外也可以通过分析页面的结构,辅助定位问题。

通过 driver.page_source 可以获取页面的 XML 结构。与 Selenium 输出的 HTML 格式不一样,Appium 的 page_source 是 XML 格式。

示例代码如下:

PYTHON 版本
from appium import webdriver
...
def test_search(self):
# 点击搜索
self.driver.find_element_by_id(
"com.xueqiu.android:id/tv_search").click()
# 输入内容“alibaba”
self.driver.find_element_by_id(
"com.xueqiu.android:id/search_input_text").send_keys("alibaba")
# 打印输出 class 属性
print(self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android')
.get_attribute('class'))
# 打印输出页面源码
print(self.driver.page_source)
...
JAVA 版本
import io.appium.java_client.android.AndroidDriver;
...
@Test
public void searchTest(){
// 点击搜索
driver.findElement(By.id("com.xueqiu.android:id/tv_search")).click();
// 输入内容“alibaba”
driver.findElement(By.id("com.xueqiu.android:id/search_input_text"))\
.sendKeys("alibaba");
// 打印输出 class 属性
System.out.println(driver.findElementByXPath(\
"//*[@resource-id=\"com.xueqiu.android\"]").getAttribute("class"));
// 打印输出页面源码
System.out.println(driver.getPageSource());
}
...

上面的代码创建了一个测试方法,先定位到搜索框,向搜索框中输入内容,通过获取属性方法获取到搜索结果的 class 属性,最后获取页面的布局源码。

️ 你好呀,喜欢这篇文章的话烦请点个“赞”哦!大家的支持很重要~() PS:有问题可以联系我们哦~v ceshiren001

>>更多技术文章分享和免费资料领取

技术分享 | app自动化测试(Android)--App 控件交互的更多相关文章

  1. 开源整理:Android App新手指引开源控件

    开源整理:Android App新手指引开源控件 一个App第一次与用户接触或者发生大版本更新时,常常会用户进行新手引导,而一个好的新手指引,往往能够方便新用户快速了解操作你的应用功能.新手指引的重要 ...

  2. 转载: 开源整理:Android App新手指引开源控件

    http://blog.coderclock.com/2017/05/22/android/open-source-android-app-guide-view-library/ 开源整理:Andro ...

  3. JS与APP原生控件交互

    "热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...

  4. Android 开源控件与常用开发框架开发工具类

    Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...

  5. Android基本控件之Menus

    在我们的手机中有很多样式的菜单,比如:我们的短信界面,每条短信,我们长按都会出现一个菜单,还有很多的种类.那么现在,我们就来详细的讨论一下安卓中的菜单 Android的控件中就有这么一个,叫做Menu ...

  6. Android 基本控件相关知识整理

    Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户.作为一个程序员如何才能开发出友好的图形界 ...

  7. Android 组合控件

    前言 自定义组合控件就是多个控件组合起来成为一个新的控件,主要用来解决多次重复的使用同一类型的布局.比如我们应用的顶部的标题栏,还有弹出的固定样式的dialog,这些都是常用的,所以把他们所需要的控件 ...

  8. Android AutoCompleteTextView控件实现类似百度搜索提示,限制输入数字长度

    Android AutoCompleteTextView 控件实现类似被搜索提示,效果如下 1.首先贴出布局代码 activity_main.xml: <?xml version="1 ...

  9. android CheckBox控件的定义及事件监听

    http://www.beijibear.com/index.php?aid=336 android CheckBox控件的定义及事件监听,本例实现CheckBox控件的定义及点击事件的监听并显示结果 ...

  10. 一个Demo让你掌握Android所有控件

    原文:一个Demo让你掌握Android所有控件 本文是转载收藏,侵删,出处:"安卓巴士"      下面给出实现各个组件的源代码: 1.下拉框实现--Spinner packag ...

随机推荐

  1. 01 | 堆、栈、RAII:C++里该如何管理资源?(极客时间笔记)

    基本概念 堆,英文是 heap,在内存管理的语境下,指的是动态分配内存的区域.这个堆跟数据结构里的堆不是一回事.这里的内存,被分配之后需要手工释放,否则,就会造成内存泄漏. C++ 标准里一个相关概念 ...

  2. 用来创建用户docker registry认证的Secret

    集群环境:1.k8s用的是二进制方式安装2.操作系统是linux (centos)3.操作系统版本为 7.4/7.94.k8s的应用管理.node管理.pod管理等用rancher.k8s令牌以及ma ...

  3. mycat实现主从读取中的问题

    schema.xml 中的配置如下:..... <dataHost name="aaa" maxCon="2000" minCon="100&q ...

  4. Educational Codeforces Round 116 (Rated for Div. 2), problem: (C) Banknotes

    传送门 Problem - C - Codeforces 题目 题目重点内容手打翻译:(欢迎批评指正) 在柏林, 使用着n套不同的货币(banknotes).第i个货币面额为10ai 元,货币的第一种 ...

  5. flutter常用命令--不定期更新

    // 更新flutter flutter upgrade // Dart 构造函数默认值 ImageGridView({Key key, this.imgs, this.isEdit: false}) ...

  6. php第一次实验个人博客网站的设计编写①

    先上效果图: 网页代码:index.html <!DOCTYPE html> <html lang="en"> <head>     <m ...

  7. 支持中文!秒建 wiki 知识库的开源项目,构建私人知识网络

    不知道有没有人和我一样,觉得自建的东西是互联网上的"自留地".私人空间,有一种自己的一亩三分地随心所欲的痛快. 比如自建的博客想写什么随笔就写什么,不用取悦读者可以自娱自乐:再比如 ...

  8. 深入理解vue 修饰符sync【 vue sync修饰符示例】

    在说vue 修饰符sync前,我们先看下官方文档:vue .sync 修饰符,里面说vue .sync 修饰符以前存在于vue1.0版本里,但是在在 2.0 中移除了 .sync .但是在 2.0 发 ...

  9. 【MQ】java 从零开始实现消息队列 mq-02-如何实现生产者调用消费者?

    前景回顾 上一节我们学习了如何实现基于 netty 客服端和服务端的启动. [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]java 从零开始实现消息队列 mq-02-如何实现生产者调用 ...

  10. go-micro使用Consul做服务发现的方法和原理

    go-micro v4默认使用mdns做服务发现.不过也支持采用其它的服务发现中间件,因为多年来一直使用Consul做服务发现,为了方便和其它服务集成,所以还是选择了Consul.这篇文章将介绍go- ...