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

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

测试 APP 下载地址:

github.com/appium/samp…

首先将上面地址的 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() {//点击 Viewsdriver.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']");//打印 toastXPathSystem.out.println(driver.findElement(toastXPath));//打印 toastXPath 获取的 textSystem.out.println(driver.findElement(toastXPath).getText());
}

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

查看执行结果

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java进击框架:Spring-数据存取(七)

Java进击框架:Spring-数据存取(七) 前言事务管理声明式事务管理 DAO支持JDBC的数据访问使用JdbcTemplate控制数据库连接JDBC批处理操作封装 SQL 语句中的参数 使用R2DBC进行数据访问对象关系映射(ORM)数据访问HibernateJPA XML模式 前言 参考…

渗透测试学习day2

文章目录 连接靶机靶机:Fawn 解题过程Task 1Task 2Task 3Task 4Task 5Task 6Task 7Task 8Task 9Task 10Task 11Task 12 总结 连接靶机 详细过程可参考day1 靶机:Fawn 难度:very easy (ftp服务的靶机) 解题过程 T…

23个优秀开源免费BI仪表盘

BI也称为商业智能,是收集、分析和展示数据以支持决策者做出明智的业务决策的过程。BI帮助组织将其原始的生产数据转化为有意义的见解或者知识,以推动其业务战略。BI能够为组织改善决策、提高效率和提升资源利用率。 BI仪表盘是BI系统的重要组成部分&…

工程(十二)Ubuntu20.04LSD_SLAM运行

博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。这是一个科研互助群,主要围绕机器人,无人驾驶,无人机方面的感知定位,决策规划,以及论文发表经验,以方便大家很好很快的科研…

(待完善)python学习参考手册

这里写目录标题 观前浅谈:学习路线 :学习心得笔记:Step1:简单但一问不知怎么的组织语言去回答的小问题:什么是提示符?python解释器是什么?请正在阅读本文的朋友,安装一下PyCharm以及如何进行科学的省钱:Python中的命令行模式和交互模式的区别是什么?请正在阅读本文的朋友安装…

支持存档的书签服务LinkWarden

什么是 LinkWarden ? Linkwarden 是一个自托管、开源协作书签管理器,用于收集、组织和存档网页。目标是将您在网络上找到的有用网页和文章组织到一个地方,并且由于有用的网页可能会消失(参见链接失效的必然性)&#xf…

基于单片机的甲醛检测器设计

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、系统硬件设计三、软件设计4.1 程序结构流程图原理图 四、结论五、 文章目录 概要 本文将要提…

把wpf的窗体保存为png图片

昨晚在stack overflow刷问题时看到有这个问题,今天早上刚好来尝试学习一下 stack overflow的链接如下: c# - How to render a WPF UserControl to a bitmap without creating a window - Stack Overflow 测试步骤如下: 1 新建.net frame…

【达梦数据库】学习笔记

【达梦数据库】学习笔记 【一】如何使用idea连接达梦数据库【二】idea项目导入本地的达梦数据库驱动jar包(方法一)【三】idea项目把本地的达梦数据库驱动jar包安装到本地仓库(方法二) 【一】如何使用idea连接达梦数据库 &#xf…

深入理解强化学习——多臂赌博机:乐观初始值

分类目录:《深入理解强化学习》总目录 目前为止我们讨论的所有方法都在一定程度上依赖于初始动作值 Q 1 ( a ) Q_1(a) Q1​(a)的选择。从统计学角度来说,这些方法(由于初始估计值)是有偏的。对于采样平均法来说,当所有…

蓝桥杯双周赛算法心得——串门(双链表数组+双dfs)

大家好,我是晴天学长,树和dfs的结合,其邻接表的存图方法也很重要。需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .串门 2) .算法思路 串门(怎么存图很关键&#xf…

springboot本地启动多个模块报错:Address already in use: JVM_Bind

目录 背景解决方法 背景 环境: jdk1.8 idea 2019.2.4idea本地启动多个模块联调时,提示报错: 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 9090; nested exception is: java.net.BindException: Addre…