专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

toast提示是什么,toast提示代码

来源:小易整编  作者:小易  发布时间:2023-02-22 11:23
摘要:toast提示是什么,toast提示代码一、什么是Toast二、获取Toast提示信息的前提1.针对这种元素,有的时候我们需要做什么呢?2.要获取Toast信息要满足以下四个要求3.怎么看Server版本?4.如果AppiumServer版...
  • toast提示是什么,toast提示代码

  • 一、什么是 Toast
  • 二、获取 Toast 提示信息的前提
    • 1.针对这种元素,有的时候我们需要做什么呢?
    • 2.要获取 Toast 信息要满足以下四个要求
    • 3.怎么看 Server 版本?
    • 4.如果 Appium Server 版本低于 1.6.3+,代码中必须指定 automationName 为 UIAutomator2
  • 三、4 点需要注意的事情
    • 1.在我们等待元素可见的时候,不要用 visibility_of_element_located,因为它对 Toast 的可见处理并不支持,会直接报错命令无法执行。
    • 2.选取部分内容匹配需注意
    • 3.没有找到匹配的 Toast
    • 4.Toast 获取跟 Appium 的版本有关
  • 四、Toast 提示信息获取
  • 五、代码

一、什么是 toast

安卓 4.4 以上的版本都是基于 UiAutomator,现在已经改为 UiAutomator2 了。所以 Toast 在原来的 UiAutomator 基础上没办法识别,没法识别的话就需要利用 UiAutomator2了。

如图是 V1.10.0,之前的 Appium 版本中没有看到过它会自动把自动化测试引擎从 Appium 切换到 UiAutomator2,可以去看下启动日志。如果版本低于 v1.10.0,版本比较旧的话,应该是没有这种提示信息的。

toast提示是什么,toast提示代码

所以在很多版本当中,如果我们要用 Toast,我们就需要指明一个东西:那就是「自动化测试引擎必须指明为 UiAutomator2。」 不然它默认就不用这个,必须自己指明。但是现在已经做了改革了,会自动切换为 UiAutomator2。

automationName 是我们的desired_caps当中明确要指明的。如果想要获取到 Toast 也是有要求的。

Toast 是什么?

UiAutomator Viewer 是抓不到它的。即使截屏截到了,用元素定位也是定位不到的。所以用正常套路是搞不定它的。

toast提示是什么,toast提示代码

进行提示作用,且时间出现得非常短。基本上在所有的手机当中都是这种效果(包括验证码、或者注册提示)。验证码提示,你也只能看着它,深灰色的背景,你不能点击确定、取消,没有你可以选项的地方也没有你可以输入的地方。这个才叫做 Toast,因为长得比较别致,UiAutomator Viewer 找不着它。

二、获取 Toast 提示信息的前提

1.针对这种元素,有的时候我们需要做什么呢?

我们想要判断一下这样的 Toast 有没有出现,一般这样的 Toast 是带有文字的。如果弹出的是个空白的 Toast 是没有意义的,那么你就可以提 Bug 了。「所以 Toast 里面都是有内容的。」

那这样的Toast怎么获取呢?

既然不支持 UiAutomator,但是又有文字。就只能用一种方式来获取,那就是 xpath。通过文本匹配来获取(文本的全部匹配和部分匹配都是可以的)。

你要获取这样的 Toast,证明它是存在的,就要有一些前置条件。

2.要获取 Toast 信息要满足以下四个要求:

  1. Appium server 版本 1.6.3+才支持 Toast 获取。(而 Appium Server 1.6.3 没有可视化界面,解决方案:下载 Appium-desktop-Setup-1.4.1-ia32.exe)。
  2. 代码中必须指定 automationName 为:UIAutomator2
  3. UIAutomator2 只支持安卓版本 5.0+

因此,因为他们的最高支持安卓版本为 4.4.2,可以使用 genymotion 模拟器。

  1. 要求安装 jdk1.8 64 位及以上。配置其环境变量 JAVA_HOME 和 path。

3.怎么看 Server 版本?

Server 版本就是这个 v1.18.0:

toast提示是什么,toast提示代码

4.如果 Appium Server 版本低于 1.6.3+,代码中必须指定 automationName 为 UIAutomator2

desired_caps["automationName"]="UiAutomator2"

否则 Toast 是找不到的。

三、4 点需要注意的事情

习惯性的操作是要等到元素可见之后,我们才会去操作它。新的东西出来,我们的习惯都是等到它可见之后再去操作。因为它的时间非常短,所以间隔轮循周期做的非常短。

接下来需要做 Toast 的获取,根据文本匹配,是通过 xpath 匹配。下面是需要注意的事情:

1.在我们等待元素可见的时候,不要用 visibility_of_element_located,因为它对 Toast 的可见处理并不支持,会直接报错命令无法执行。

「也就是等待的时候,要用元素存在的条件。不能用元素可见的条件。」

driverWait 方法中,请用presence_of_element_located。它存在了就行了,存在了之后再去处理它。

2.选取部分内容匹配需注意

点击 click 后出来文本要是「手机号码或者密码不为空」。有时候觉得文本太长了,不想全部匹配。只想通过「手机号码」这个文本匹配来找到它。

可以,但是选取部分内容的时候要注意下:除了 xpath 之外,页面上其它元素有没有文本也是「手机号码」的。

toast提示是什么,toast提示代码

用这种 xpath 匹配「手机号码」的话,优先匹配的是别人。不一定是你想匹配的「手机号码或密码不能为空」了。

3.没有找到匹配的 Toast

toast提示是什么,toast提示代码

等到这执行的时候,人家早就消失了。等待的时候,人家早就消失了,那怎么办呢?

toast提示是什么,toast提示代码

只能是缩短时间或者不等待,直接去获取一下。图中,已经在执行,但是人家已经消失了。「Toast 这个问题有些尴尬,如果特别需要 Toast 上面的消息怎么办?可以求助开发,帮你稍微延长一点时间。」

有时能找到 Toast,有时找不到,这里是概率性的问题。目前对于 Toast 只有这一种获取方式。

4.Toast 获取跟 Appium 的版本有关

还有一个问题,Toast 获取的时候提示你"应用的一些页签啊没有通过",这个也是跟 Appium 的版本有关。Toast 这块的问题是比较多的。

如果没有 UIAutomator2 是绝对会失败,即便你看到它出现了也一定会失败。Server1.9 的时候获取 Toast 是没有问题的。

四、Toast 提示信息获取

xpath 表达式是固定的,现在主要用的方式是文本匹配(部分、全部都可以)。那这个表达式就是双斜杠(相对定位)。

xpath = '//*[contains(@text,"部分文本内容")]'

这个表达式是固定的。只要把 toast 对应的文本信息替换下就可以了。

#获取toast内容是否出现
def toast_exist(self, toastmessage):
    toast_loc = ("xpath", "//*[contains(@text,'%s')]" % toastmessage)
    try:
    WebDriverWait(self.driver,5,0.2).until(EC.presence_of_element_located
    (toast_loc))
      #获取文本内容
      driver.find_element_by_xpath(toast_loc).text
      return True
    except:
      return False

五、代码

from appium import webdriver # from time import sleep from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.mobileby import MobileBy desired_caps={} # 自动化测试引擎 # desired_caps["automationName"]="UiAutomator2" # 平台类型 desired_caps["platformName"]="Android" # 平台版本号 desired_caps["platformVersion"]="10" # 设备名称 desired_caps["deviceName"]="2NSDU20410017297" # app 包名 desired_caps["appPackage"]="输入appPackage" # app 入口 acitivity desired_caps["appActivity"]="输入activity" # 连接Appium server。前提:appium desktop要启动。有监听端口。 # 将desired_caps发送给appium server。打开app driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) # 运行代码之前: #1.appium server启动成功。处于监听状态 #2.模拟器/真机必须能够被电脑识别。即adb devices能够识别到要操作的设备。 # 点击“我的” WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,"com.lemon.lemonban:id/navigation_my"))) driver.find_element_by_id('com.lemon.lemonban:id/navigation_my').click() # # 点击“我的头像” WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,"com.lemon.lemonban:id/fragment_my_lemon_avatar_layout"))) driver.find_element_by_id("com.lemon.lemonban:id/fragment_my_lemon_avatar_layout").click() #点击手机密码登录 WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,'com.lemon.lemonban:id/btn_login'))) driver.find_element_by_id('com.lemon.lemonban:id/btn_login').click() # 1.xpath表达式、文本匹配 loc='//*[contains(@text,"{}")]'.format("手机号码或密码") # 等待的时候,要用元素存在的条件。不能用元素可见的条件。 try:    WebDriverWait(driver,10,0.01).until(EC.presence_of_elements_located((MobileBy.XPATH,loc)))    # 上限10秒就够了,确认toast在页面上存在的时候大概是多久,它都没有0.5秒,你去间隔0.5,可能消失了,你还只留在这。    print(driver.find_element_by_xpath(loc).text) except:    print("没有找到匹配的toast!!!!")


本文地址:百科问答频道 https://www.neebe.cn/wenda/903235.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 销售额是什么意思?

    销售额是什么意思?

    销售额是指商业企业的一项关键指标,代表企业在一定时期内的营业额,它实时反映企业经营活动的情况,是衡量企业经营能力和效益的重要指标。销售额可以有多种形式,如零售销售额、批发销售额和出口销售额等。销售额的计算方法很简单,即:销售额=销售数量...

  • iTools是什么意思?

    iTools是什么意思?

    iTools是一款功能强大的苹果设备管理工具。它为苹果设备用户提供了便捷的设备管理功能,包括文件传输、备份还原、应用程序管理、屏幕截图、屏幕录制、音乐管理、视频管理等多种功能,而且支持所有的i系列设备,例如iPod、iPhone和iPad...

  • 无损分区工具是什么意思?

    无损分区工具是什么意思?

    无损分区工具是一种硬盘分区方式,是指在分区时保持原有数据不受损坏的一种分区技术,这种分区技术称为“无损分区”。无损分区可以保护硬盘上的数据,在分区时不会破坏硬盘上的任何数据。而且,在数据安全性上也有一定的优势,因为它不会破坏的数据,因此可...

  • 消费凭证是什么意思?

    消费凭证是什么意思?

    消费凭证是指一种书面的证明凭证,当消费者购买商品或服务时,商家会向其提供消费凭证,凭此凭证可以证明消费者购买了特定的商品或服务,以及在这次购买中耗费的钱财数额。消费凭证是一种用于表示购买交易的依据,是为消费者提供全面鉴证的凭证。它可以表明...

  • DSM系统是什么意思?

    DSM系统是什么意思?

    DSM是一种新晋的分布式、可扩展的模块化系统。它是以无服务器、全节点一致性的系统架构为基础,采用多进程系统将服务、运维功能以模块化的方式集合到一起而不会配置服务的的系统设计模型。DSM的核心特点在于采用了一致性的分布式架构,模块化的结构,...

  • 裸金属是什么意思?

    裸金属是什么意思?

    简而言之,裸金属是指被提取出来,没有被添加任何基材的未加工金属。它是将矿石熔化下去后提炼出来的金属,用来做各种活动和企业的原材料。裸金属通常是一种切削或加工的未经热处理的金属。裸金属一般不经过任何表面处理,以自身属性状态出售。它不会涂以油...

  • CVSS是什么意思?

    CVSS是什么意思?

    CVSS(CommonVulnerabilityScoringSystem,中文译名“公共漏洞评分系统”)是一种漏洞分级和评分系统,是由美国国家信息安全标准研究所(NIST)推行的一套机制,它利用特定的参数来构建一个漏洞评级分类体系...

  • 键盘接口是什么意思?

    键盘接口是什么意思?

    键盘接口一般是用于挂接键盘的接口。它也称为键盘插座或键盘接头,它是一个连接键盘和计算机系统之间的重要硬件部件。键盘接口可以用来接收键盘上发出信号,以便在主板上发出完整的指令。键盘接口可以分为有线和无线两种,有线键盘接口是指采用插孔的连接方...

  • 周排行
  • 月排行
  • 年排行

精彩推荐