技术分享 | app自动化测试(Android)-- 特殊控件 Toast 识别

news2024/11/24 9:07:09

Toast 是 Android 系统中的一种消息框类型,它属于一种轻量级的消息提示,常常以小弹框的形式出现,一般出现 1 到 2 秒会自动消失,可以出现在屏幕上中下任意位置。它不同于 Dialog,它没有焦点。Toast 的设计思想是尽可能的不引人注意,同时还向用户显示信息希望他们看到。

测试 APP 下载地址:

https://github.com/appium/sample-code/raw/master/sample-code/apps/ApiDemos/bin/ApiDemos-debug.apk 1

首先将上面地址的 apk 包下载到本地,并安装到模拟器中;在模拟器中打开 API Demos,依次点击“Views”-“Popup Menu”-“Make a Popup”-“Search”,就会弹出消息提示框,如图:

上图中 “Clicked popup menu item Search” 就是 Toast,但它通常在页面上停留的时间只有 2 秒左右,通过 Appium Inspector 一般不容易获取到这个元素。

获取Toast

在模拟器中打开 API Demos 应用,依次点击 “Views”-“Popup Menu”-“Make a Popup”-“Search”,查看页面 Toast 元素。

示例代码如下:

# 设置 capabilities
caps = {}
caps["platformName"] = "Android"
caps["appPackage"] = "io.appium.android.apis"
caps["appActivity"] = ".ApiDemos"
#必须使用uiautomator2框架
caps["automationName"] = "uiautomator2"
caps["deviceName"] = "hogwarts"
# 与Appium Server 建立连接
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
# 设置隐式等待
driver.implicitly_wait(5)

# 点击 Views
driver.find_element_by_accessibility_id("Views").click()
# 滑动页面
TouchAction(driver).press(380, 1150)\
  .move_to(380, 150).release().perform()
# 点击 `Popup Menu` 项目
driver.find_element_by_xpath(
  "//*[@content-desc='Popup Menu']").click()
# 点击 `Make a Popup`
driver.find_element_by_xpath(
  "//*[@content-desc='Make a Popup!']").click()
# 点击 'Search'
driver.find_element_by_xpath("//*[contains(@text,'Search')]").click()
toastXPath = "//*[@class='android.widget.Toast']"
#打印 toastXPath
print(driver.find_element_by_xpath(toastXPath))
#打印 toastXPath 获取的 text
print(driver.find_element_by_xpath(toastXPath).text)
@BeforeAll
public static void setUp() throws MalformedURLException {
    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
    desiredCapabilities.setCapability("platformName", "Android");
    desiredCapabilities.setCapability("appPackage", "io.appium.android.apis");
    desiredCapabilities.setCapability("appActivity", ".ApiDemos");
    desiredCapabilities.setCapability("automationName", "uiautomator2");
    desiredCapabilities.setCapability("deviceName", "hogwarts");

    URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub");
    driver = new AndroidDriver(remoteUrl, desiredCapabilities);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}

@Test
public void toastTest() {
    //点击 Views
    driver.findElement(MobileBy.AccessibilityId("Views")).click();
    //滑动页面
    TouchAction action = new TouchAction(driver);
    PointOption pressPointOne = PointOption.point(380, 1150);
    PointOption movePointOne = PointOption.point(380, 150);
    action.press(pressPointOne).moveTo(movePointOne).release();
    //点击 `Popup Menu` 项目
    driver.findElement(By.xpath("//*[@content-desc='Popup Menu']")).click();
    //点击 `Make a Popup`
    driver.findElement(By.xpath("//*[@content-desc='Make a Popup!']")).click();
    //点击 'Search'
    driver.findElement(By.xpath("//*[contains(@text,'Search')]")).click();
    By toastXPath = By.xpath("//*[@class='android.widget.Toast']");
    //打印 toastXPath
    System.out.println(driver.findElement(toastXPath));
    //打印 toastXPath 获取的 text
    System.out.println(driver.findElement(toastXPath).getText());
}

这里定位 Toast 使用了 Xpath 表达式进行定位,因为 Toast 的 class 属性比较特殊,在当前页面上一般会出现一次 class=“android.widget.Toast” 的元素,所以使用 Xpath 定位方式搭配隐式等待就可以很轻松的可以定位到。

查看执行结果

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

全套资料获取方式:点击下方小卡片自行领取即可

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不要再纠结了!看完这篇,你就能秒懂webpack、vite、rollup三者间差异!

前端打包工具webpack、vite、rollup的区别及使用 webpack、vite、rollup的区别webpack、vite的区别为什么vite比webpack打包快?为什么有人会说vite慢?首屏问题懒加载问题解决方案注意点 webpackwebpack打包过程webpack打包原理第一次冷启动慢的原因热更新…

在yolov5源码中添加注意力机制

yolov5源码中添加注意力机制 1 项目环境配置1.1 yolov5 源码下载1.2 创建虚拟环境1.3 安装依赖 2 常用的注意力机制2.1 SE 注意力机制2.2 CBAM 注意力机制2.3 ECA 注意力机制2.4 CA 注意力机制 3 添加方式3.1 修改 common.py 文件3.2 修改 yolo.py 文件3.3 修改 yolov5s.yaml 文…

易查分如何导入数据?这个最关键的要点别忽略

我们在使用易查分制作查询系统时,偶尔会遇到Excel文件没有办法正常上传的情况。这个问题困扰着许多老师,他们不知道该如何解决。今天我想和大家讨论一下,易查分导入数据时最常出现错误的原因,其中这个要点最关键,但很多…

谷歌Bard入门指南

文章目录 谷歌Bard入门指南一、简介二、使用指南三、中文化3.1 中文提问3.2 中文回答 四、Hello Game五、亮点 谷歌Bard入门指南 一、简介 Bard 是一个大型语言模型,也称为对话式 AI 或聊天机器人,经过训练,内容丰富且全面。Bard 接受过大量…

Mysql——》哈希索引

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

接口测试-postman,JMeter与LoadRunner比较

目录 JMeter与LoadRunner比较 JMeter缺点 一.创建测试用例集、子集 二.创建测试用例 三.设置变量 四.添加响应处理 五.批量执行测试用例 总结: postman是一个谷歌出的轻量级的专门测试接口的小工具~(PS:postman包括两种:C…

PostgreSQL如何根据执行计划进行性能调优?

EXPLAIN命令 PG中EXPLAIN命令语法格式如下: EXPLAIN [(option[,...])] statement EXPLAIN [ANALYZE] [VERBOSE] statement该命令的options如下: ANALYZE [boolean]VERBOSE [boolean]COSTS [boolean]BUFFERS [boolean]FORMAT {TEXT | XML | JSON | YAM…

【UnityDOTS 十】DynamicBufferComponent介绍

DynamicBufferComponent 前言 DynamicBufferComponent 作为一种特殊的组件存在,可以作为一种非托管内存下可动态调整带下的数组容器组件。 一、DynamicBufferComponent是什么? DynamicBufferComponent也是组件的一种。 需要关注的是内部指针&#xf…

spring使用01

① 导入 Spring 开发的基本包坐标 ② 编写 Dao 接口和实现类 ③ 创建 Spring 核心配置文件 ④ 在 Spring 配置文件中配置 UserDaoImpl ⑤ 使用 Spring 的 API 获得 Bean 实例 第一步&#xff1a;创建maven的web骨架 然后&#xff0c;导入 Spring 开发的基本包坐标 <depe…

工资10K,副业20K,这届程序员搞副业真野

最近刚完成了一个远程外包项目工作&#xff0c;钱刚到账&#xff0c;小金库又添了一笔&#xff1a; 从一开始的15K死工资&#xff0c;到现在的主业副业一共25K收入&#xff0c;最近的经济压力小了很多&#xff0c;终于也有闲钱和老婆去旅旅游&#xff0c;升级一下外设&#xff…

平板电脑的触控笔有必要买吗?平价电容笔排行榜

伴随着ipad的流行&#xff0c;部分学习党开始从传统的纸笔教学向无纸化教学转变。于是&#xff0c;原本属于苹果专利的电容笔&#xff0c;一下子就火了起来&#xff0c;不少人都对这个价格接近一千块钱的电容笔产生了浓厚的兴趣。我想&#xff0c;苹果电容笔特有的的“重力压感…

MySQL数据库基础(二):DDL,DML,DQL

六、DDL数据库操作 1、MySQL的组成结构 注&#xff1a;我们平常说的MySQL&#xff0c;其实主要指的是MySQL数据库管理软件。 一个MySQL DBMS可以同时存放多个数据库&#xff0c;理论上一个项目就对应一个数据库。如博客项目blzhujianog数据库、商城项目shop数据库、微信项目wec…

OpenCV创建一张类型为CV_8UC3的3通道彩色图像

#include <iostream> #include <opencv2/imgcodecs.hpp> #include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp>int

[MySQL]MySQL库的操作

[MySQL]MySQL库的操作 文章目录 [MySQL]MySQL库的操作1. 创建数据库2. 字符集和校验规则2.1. 基本概念2.2. 查看系统默认字符集以及校验规则2.3. 查看数据库支持的字符集2.4 查看数据库支持的校验规则2.5 指明字符集和校验规则创建数据库2.6 校验规则对数据库的影响 3. 删除数据…

经典轻量级神经网络(1)MobileNet V1及其在Fashion-MNIST数据集上的应用

经典轻量级神经网络(1)MobileNet V1及其在Fashion-MNIST数据集上的应用 1 MobileNet V1的简述 自从2017年由谷歌公司提出&#xff0c;MobileNet可谓是轻量级网络中的Inception&#xff0c;经历了一代又一代的更新。 MobileNet 应用了Depthwise 深度可分离卷积来代替常规卷积…

【hadoop】Google的基本思想

Google的基本思想 三架马车GFS分布式文件系统的核心架构和原理机架感知 MapReduce计算模型PageRank问题MapReduce BigTable 三架马车 Google的基本思想主要有三个&#xff0c;称之为三架马车&#xff0c;分别是GFS&#xff08;Google File System&#xff09;、MapReduce计算模…

gitlab/gerrit

gitlab/gerrit 1. gitlab2. gerrit2.1 环境准备2.2 下载软件2.3 创建启动账户2.4 安装gerrit2.5 创建登录账户2.6 启动服务2.7 修改配置文件2.8 配置反向代理(nginx)2.9 gerrit主页 3. gitlabgerrit3.1 配置gerrit replication功能&#xff08;用于复制具体项目&#xff09;3.2…

深入浅出讲解Stable Diffusion原理,新手也能看明白

说明 最近一段时间对多模态很感兴趣&#xff0c;尤其是Stable Diffusion&#xff0c;安装了环境&#xff0c;圆了自己艺术家的梦想。看了这方面的一些论文&#xff0c;也给人讲过一些这方面的原理&#xff0c;写了一些文章&#xff0c;具体可以参考我的文章&#xff1a; 北方…

51单片机驱动 mg996r金属舵机 STC89C52单片机直接驱动金属大舵机

/*无论是大舵机&#xff0c;还是小舵机&#xff0c;控制方法都一样会区别在 大舵机只能接P0口&#xff08;此口外接上拉&#xff0c;驱动电流最大&#xff09;小舵机任意口 */ //#include<reg51.h> //#define uint unsigned int //#define uchar unsigned char //sbit S…

10、架构:组件通信设计

通信是一个应用中不可或缺的一个功能&#xff0c;现如今前端视图类框架大多数都是由数据驱动&#xff0c;通过数据来进行视图层的展示渲染。举个简单的例子如下&#xff0c;这是一个常见的 React 列表渲染&#xff1a; // each const numbers [1, 2, 3, 4, 5]; const listIte…