Appium自动化之获取APP Toast(消息提示框)的信息

在我们日常使用App过程中,经常会看到App界面有一些弹窗提示(如下图所示)这样的提示框称之为Toast提示框,这些提示元素出现后等待3秒左右就会自动消失,那么我们该如何获取这些元素文字内容呢?


Appium自动化之获取APP Toast(消息提示框)的信息_第1张图片
Toast提示框

Toast简介

  • Android中的Toast是一种简易的消息提示框。 当视图显示给用户,在应用程序中显示为浮动。和弹出框不一样的是,它永远不会获得焦点,无法被点击。
  • Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,一般3秒左右就消失了。因此使用传统的元素定位工具,我们是无法定位到Toast元素的。

实例

测试环境

  • JDK:1.8.0_171
  • appium版本:1.7.2(不能低于1.6.3)
  • selenium版本:3.141.0
  • 测试设备:Android 7.0
  • Python:3.5
  • 测试App:鼠贷金融 Android app V4.2.9

Appium Toast内容获取

Appium 1.6.3开始支持识别Toast内容,主要是基于UiAutomator2,
因此需要在Capablity配置如下参数:
desired_caps['automationName']='uiautomator2'
安装appium-uiautomator2-driver: 安装命令如下:
cnpm install appium-uiautomator2-driver
安装成功后可以在 C:\Users\XXXX\node_modules看到对应的文件:

测试场景

进入登录界面输入错误的用户名或者密码,获取Toast内容:

  • 没有找到用户名或密码

代码实现

# coding=utf-8
from appium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait

# 真机
desired_caps = {
  "platformName": "Android",
  "platformVersion": "7.0",
  "deviceName": "Honor NOTE 8",
  "udid": "8DF6R16728706566",
  "appPackage": "com.jinding.shuqian",
  "appActivity": "com.jinding.shuqian.WelcomeActivity",
  "noReset": 'true',
  # appium高版本已经会自动切换UiAutomator2。所以可以不用指定
  'automationName': 'uiautomator2'
}
# 连接
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
sleep(2)

print('元素检测')
# 用于检测是否是第一次打开APP(第一次打开APP会有引导页)
try:
  # 定位我的
  my = driver.find_element_by_id('com.jinding.shuqian:id/rb_center')
except Exception as e:
  print('未找到元素')
else:
# 点击我的
 my.click()

# 输入用户名
driver.find_element_by_id('com.jinding.shuqian:id/et_login_username').send_keys('123')
# 输入密码
driver.find_element_by_id('com.jinding.shuqian:id/et_login_password').send_keys('aaaaaa')
# 点击登录
driver.find_element_by_id('com.jinding.shuqian:id/button_login').click()

# 用于生成xpath定位 相当于 "//*[@text='没有找到用户名或密码']"
toast_message = "没有找到用户名或密码"
message ='//*[@text=\'{}\']'.format(toast_message)

# 获取toast提示框内容
toast_element = WebDriverWait(driver,5).until(lambda x:x.find_element_by_xpath(message))
print(toast_element.text)
assert toast_element.text == "没有找到用户名或密码"

注意:Toast内容为中文时,顶部必须注释# coding=utf-8 否则会因为编解码导致文字识别失败。

你可能感兴趣的:(Appium自动化之获取APP Toast(消息提示框)的信息)