首页 > 其他分享 >快速上手App自动化测试利器,Toast原理解析及操作实例

快速上手App自动化测试利器,Toast原理解析及操作实例

时间:2024-03-20 10:55:05浏览次数:22  
标签:Toast 控件 appium text App driver 上手 self

简介

Toast 是一种轻量级的消息提示,常常以小弹框的形式出现,一般出现 1 到 2 秒会自动消失,可以出现在屏幕上中下任意位置。

Toast具有如下的特点:

  • 无法被点击,不同于 Dialog,永远不会获得焦点。
  • Toast 显示的时间有限,Toast 会根据用户设置的显示时间后自动消失
  • 是系统级别的控件,属于系统 settings

Toast 的思想:尽可能不引人注意,同时还向用户显示信息,希望用户看到。

如下图,就是一种 Toast 消息框类型:

Toast 定位

Appium 在抓取 Toast 时,使用的是 uiautomator 底层,然后将 Toast 元素放入控件树中。需要注意的是,Toast 本身并不属于常规的用户界面控件,而是一种短暂的消息提示,在这个过程中,Appium 使用的是 uiautomator2。

Toast 出现的时间一般比较短,可以通过等待或者打印页面元素的方式判断是否存在,并且通过 Xapth 或者 Accessibility ID 的定位方式找到 Toast 元素。在页面结构中,Toast 元素大致如下所示:

<!-- 在这里可以看到Toast消息提示框的class是android.widget.Toast,且一个页面一般只有一个 -->
<android.widget.Toast index="1" package="com.android.settings" class="android.widget.Toast" text="Clicked popup menu item Search" displayed="true" />
  1. 配置 driver 的初始化和关闭 driver 的步骤。
class TestToast:

  def setup_class(self):
      caps = {
          'platformName': 'android',
          'appium:appPackage': 'io.appium.android.apis',
          'appium:appActivity': 'io.appium.android.apis.view.PopupMenu1',
          "appium:noReset": True,
          "appium:shouldTerminateApp": True
      }
      self.driver = webdriver.Remote("http://127.0.0.1:4723", options=UiAutomator2Options().load_capabilities(caps))
      self.driver.implicitly_wait(15)

  def teardown_class(self):
      self.driver.quit()
  1. 定位 toast 消息提示框

def test_get_toast(self):
      # 定位到 Make a Popup! 按钮并点击
      self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Make a Popup!").click()
      # 消息框类型选择search
      self.driver.find_element(AppiumBy.XPATH, "//*[@text='Search']").click()
      # 获取 Toast 弹框文本信息
      result = self.driver.find_element(AppiumBy.XPATH, "//*[contains(@text, 'Clicked popup')]").text
      assert result == "Clicked popup menu item Search"

总结

Toast 消息提示框是一个出现时间短并且无法被点击,一般可以用 Xpath 或者 Accessibility ID 的方式去定位。

标签:Toast,控件,appium,text,App,driver,上手,self
From: https://www.cnblogs.com/hogwarts/p/18084753

相关文章

  • Lambdaquerywrapper默认带着查询条件怎么弄?
    在使用MyBatis-Plus的LambdaQueryWrapper时,如果需要添加默认的查询条件,可以通过继承LambdaQueryWrapper类,并重写其方法来实现。以下是一个示例代码,演示如何在继承LambdaQueryWrapper的基础上添加默认的查询条件:importcom.baomidou.mybatisplus.core.conditions.query.LambdaQu......
  • android App启动流程三-Activity启动流程
    上一篇我们介绍了从App的进程创建到Application启动执行,今天我们继续深入学习一下,Activity的启动流程。realStartActivityLocked我们接着上一篇,从ActivityTaskManagerService.attachApplication函数看起,最终发现会执行到ActivityTaskSupervisor.realStartActivityLocked方法......
  • Node.js毕业设计仿小红书app(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的迅猛发展,社交媒体应用已成为人们日常生活中不可或缺的一部分。小红书作为一款集社区分享、电商购物于一体的综合性平台,以其独特的内容推荐......
  • 【APIM】Azure API Management Self-Host Gateway是否可以把请求的日志发送到Applicat
    问题描述AzureAPIManagementSelf-HostGateway是否可以把请求的日志发送到ApplicationInsights呢?让它和使用Azure上托管的Gateway一样呢?这是在APIM门户上配置API,设置的DiagnosticsLogs,当选择ApplicationInsights时,就可以把对接口请求时候所携带的Header/Body等信息发送......
  • 使用百度智能云千帆 AppBuilder 创建一个简单的AI应用教程,还可以配置到微信客服和微信
    目录一、前言二、使用教程三、案例1、描述词创建应用2、发布应用链接效果图一、前言国内想要创建一个自己的AI工具,除了使用openAI接口外,其实还可以使用百度文心一言的接口,那就是百度智能云的千帆平台。毕竟如果使用openAI的接口的话,有很多成本在内的,这个我就不方便......
  • Flutter开发多端天气预报App:一场奇妙的编程之旅
    在这个信息爆炸的时代,我们渴望获取最新的天气信息,以便更好地规划我们的生活。而作为程序员的我们,又怎能错过用技术手段打造一款个性化、便捷的天气预报App呢?在本篇博客中,我将带你踏上一场奇妙的编程之旅,使用Flutter框架开发一款支持多端的天气预报App。前言作为一名小白,你......
  • MyBatis3源码深度解析(十六)SqlSession的创建与执行(三)Mapper方法的调用过程
    文章目录前言5.9Mapper方法的调用过程5.10小结前言上一节【MyBatis3源码深度解析(十五)SqlSession的创建与执行(二)Mapper接口和XML配置文件的注册与获取】已经知道,调用SqlSession对象的getMapper(Class)方法,传入指定的Mapper接口对应的Class对象,即可获得一个动态......
  • GTC 2024 开幕,英伟达发布新一代 GPU 架构;Apple ID 或将淘汰丨 RTE 开发者日报 Vol.168
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人......
  • 从 Linux 内核角度探秘 JDK MappedByteBuffer
    本文涉及到的内核源码版本为:5.4,JVM源码为:OpenJDK17,RocketMQ源码版本为:5.1.1在之前的文章《一步一图带你深入剖析JDKNIOByteBuffer在不同字节序下的设计与实现》中,笔者为大家详细剖析了JDKBuffer的整个设计体系,从总体上来讲,JDKNIO为每一种Java基本类型定义了对......
  • linux命令 --简化版--快速上手
    linux命令--简化版--快速上手系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMB[IOS](https://www.2cto.com/kf/yidong/iphone/)/DMI)hdparm-i/dev/hda罗列一个磁盘的......