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

Toast简介

Android中的Toast是一种简易的消息提示框。 当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。

Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,一般3秒左右就消失了。因此使用传统的元素定位工具,我们是无法定位到Toast元素的(传说中低调奢华有内涵)。

Appium Toast内容获取

Add ability to verify TOAST messages (these can't be interacted with, only text retrieval allowed)

Appium 1.6.3开始支持识别Toast内容,主要是基于UiAutomator2,因此需要在Capablity配置如下参数:

desired_caps['automationName']='uiautomator2'

安装appium-uiautomator2-driver: 安装命令如下:

cnpm install appium-uiautomator2-driver

安装成功后可以在 C:\Users\XXXX\node_modules看到对应的文件:

  • _appium-uiautomator2-driver@1.12.0@appium-uiautomator2-driver
  • _appium-uiautomator2-server@1.10.0@appium-uiautomator2-server

安装selenium模块

pip install selenium

安装完成后使用如下命令检测是否安装成功

#查看selenium版本

C:\Users\Shuqing>pip show selenium

Name: selenium

Version: 3.11.0

Summary: Python bindings for Selenium

Home-page: https://github.com/SeleniumHQ/selenium/

Author: UNKNOWN

Author-email: UNKNOWN

License: Apache 2.0

Location: c:\python35\lib\site-packages

Requires:

Required-by: Appium-Python-Client

测试环境

  • jdk版本:"1.8.0_05"
  • appium版本:1.7.2 (不能低于1.6.3)
  • selenium:3.11.0
  • 测试设备:Android 5.1.1
  • Python:3.5
  • 测试App:考研帮Android app V3.1.0

测试场景

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

  • “用户名或密码错误,你还可以尝试4次”
  • “验证失败次数过多,请15分钟后再试”

代码实现

get_toast.py

# coding=utf-8

from find_element.capability import driver

from selenium.webdriver.support.ui import WebDriverWait

driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').clear()

driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').send_keys('zxss018')

driver.find_element_by_id('com.tal.kaoyan:id/login_password_edittext').send_keys('zxw2018')

driver.find_element_by_id('com.tal.kaoyan:id/login_login_btn').click()

error_message="用户名或密码错误,你还可以尝试4次"

limit_message="验证失败次数过多,请15分钟后再试"

message='//*[@text=\'{}\']'.format(error_message)

# message='//*[@text=\'{}\']'.format(limit_message)

toast_element=WebDriverWait(driver,5).until(lambda x:x.find_element_by_xpath(message))

print(toast_element.text)

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

参考资料

https://testerhome.com/topics/6685

最新文章

  1. int main( int argc, char **argv)
  2. 消灭Bug!十款免费移动应用测试框架推荐
  3. 文件I/O
  4. mac中vmware tools进行磁盘压缩和vmware-tools-cli的使用方法
  5. [原博客] POJ 1067 取石子游戏
  6. A - Wireless Network-poj2236(简单并查集)
  7. 《SDN核心技术剖析和实战指南》3.3读书笔记
  8. TelerikUI_RadGrid_Filter 自定义方法
  9. 【转】linux 关机命令总结
  10. Tomcat启动报ClassNotFoundException错误,解决
  11. Java插入排序算法
  12. 基本 TCP 的回射服务器
  13. spring boot + jpa + bootstrap + thymeleaf 简单的增删改查Demo
  14. s6-2 UDP
  15. Prezento – 轻量、简单的 jQuery 幻灯片插件
  16. springboot mybatis 后台框架平台 集成代码生成器 shiro 权限
  17. 一张图理解Git
  18. maven添加本地jar到本地库中
  19. P4289 [HAOI2008]移动玩具(bfs)
  20. django入门-测试-part5

热门文章

  1. OpenCV+iOS开发使用文档
  2. Apache模块开发指南-APR池
  3. pthread_rwlock pthread读写锁
  4. HPU 1002 A + B Problem II【大数】
  5. C++操作Json字符串
  6. Spring学习笔记——Spring事务仅仅对执行时异常回滚
  7. 创造HTTPS的是个神
  8. Delphi7中单元文件内各个部分的执行顺序
  9. commons-fileupload上传文件(1)
  10. poj 1840(五元三次方程组)