页面的错误提示 Toast,比如:网络加载问题出现的错误、用户名或者密码输入错误、银行卡密码输入次数提示等错误,这些错误的内容一般都会以浮动的方式显示,而且他们显示的时间非常的有限,可能是几秒钟的时间就会消失掉,不会被点击,无法获取到他们的焦点,但是在 Android 中有一个叫做 Appium Toast 的工具,在 Android 1.6.x 多的时候就已经开始支持识别 Toast 的内容了,但是它是基于 UIAutomator2 的,所以说呢,在我们启动 app 的配置文件中需要增加如下参数即可:
xg_caps['automationName'] = 'uiautomator2'
目录
1、首先要安装 UIAutoMator2的包
// 在终端输入以下命令
bogon:~ Sirius$ cnpm install appium-uiautomator2-driver
在安装完成后,按照提示的安装路径进行查看,会发现有如下两个文件说明已经安装成功了:
2、安装 Selenium
方法一:
在 Terminal 中输入如下命令: pip install selenium(Python2中的命令)、pip3 install selenium(Python3中的命令),根据自己安装的环境选择不同的安装命令即可
方法二:以 PyCharm 编辑器为例
选择 PyCharm 菜单—>Preferences—>Project—>Project Interpreter,在右侧的对话框中找到 pip 后,双击,在出现的对话框中进行如下2不操作即可
验证是否安装成功,创建一个 py 文件,输入 from selenium ,如果有提示说明安装成功,如果没有安装成功,可以尝试用第一种方法进行安装
3、综合案例
- 测试环境
- java jdk version:1.8.0
- appium version:1.13.0
- selenium version:3.11.0
- device android version:6.0.1
- python version:3.6.2
- test app wandoujia version:5.71.21
- 测试场景
进入到登录界面,只输入用户名和密码,不选中 同意复选框,直接点击登录,获取提示的 Toast 内容 “请先勾选同意用户许可协议和隐私政策说明”
- 测试脚本
xg_toast.py
-*- coding:utf-8 -*-
from capability import driver
from selenium.webdriver.support.ui import WebDriverWait
def login():
// 点击左上角的主菜单导航按钮
driver.find_element_by_id('com.wandoujia.phoenix2:id/w4').click()
// 点击
driver.find_element_by_id('com.wandoujia.phoenix2:id/pp_item_setting').click()
// 点击又上角的设置按钮
driver.find_element_by_id('com.wandoujia.phoenix2:id/ow').click()
driver.find_element_by_id('com.wandoujia.phoenix2:id/l_').clear()
driver.find_element_by_xpath('//android.widget.EditText[@text="手机号/email"]').send_keys('[email protected]')
driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="1"]').send_keys('2932104943qq')
driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click()
toast_message = '请先勾选同意用户许可协议和隐私政策说明'
message = '//*[@text=\'{}\']'.format(toast_message)
// 进入元素显示等待
toast_content = WebDriverWait(driver, 5).until(lambda x:x.find_element_by_xpath(message))
print(toast_content.text)
if __name__ == '__main__':
login()
Tip:如果获取的内容中包含中文,必须在脚本的第一行添加 # coding=utf-8 ,要不然会因为编码的问题而导致文字识别失败
4、执行脚本时遇到的问题
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing
the command. Original error: UIAutomation2 is only supported since Android 5.0 (Lollipop). You could still use
other supported backends in order to automate older Android versions.
// 处理命令时发生未知的服务器端错误。原始错误:无法找到带有OS 5.1.1的活动设备或仿真器。UiAutoMe2仅支持Android 5(Lollipop).您仍然可以使用其他支持的后端来自动化旧的Android版本
也就是说,我的夜神模拟器的Android版本太低了,查了很多方法来升级Android的系统版本,都没有搞定,重新下载了模拟器也不行,有的说搞个多开就完事了,但是 Mac 的好像还不支持多开。最后选择了一个 叫做 网易MuMu 的模拟器,安装也很简单,启动也很快,默认端口是:22471
网易MuMu 网盘链接:https://pan.baidu.com/s/1HqrWGjuavzoX64IiSt36Qw 提取码: 1hg8
5、屏幕截图
屏幕截图存在的好处:在自动化测试的过程中,有的时候会遇到各种异常情况,为了能够更好的定位,有的时候除了捕捉日志之外,还需要对设备的状态进行截屏,这样更具有说服力,毕竟有图有真相吗
- 屏幕截图的方法
①、使用 save_screenshot() 可以直接保存当前屏幕的截屏图片到当前脚本所在的位置
driver.save_screenshot('toast.png')
②、使用 get_screenshot_as_file() 可以将截屏后的图片存放到指定的文件路径
driver.get_screenshot_as_file('./toast1.png')
5.1 截屏案例
- 测试场景
进入到登录界面,只输入用户名和密码,不选中 同意复选框,直接点击登录,获取提示的 Toast 内容 “请先勾选同意用户许可协议和隐私政策说明”,进行截屏
screen.py
from capability import driver
def login():
// 点击左上角的主菜单导航按钮
driver.find_element_by_id('com.wandoujia.phoenix2:id/w4').click()
// 点击
driver.find_element_by_id('com.wandoujia.phoenix2:id/pp_item_setting').click()
// 点击又上角的设置按钮
driver.find_element_by_id('com.wandoujia.phoenix2:id/ow').click()
driver.find_element_by_id('com.wandoujia.phoenix2:id/l_').clear()
driver.find_element_by_xpath('//android.widget.EditText[@text="手机号/email"]').send_keys('[email protected]')
driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="1"]').send_keys('2932104943qq')
driver.find_element_by_xpath('//*[@class="android.widget.CheckBox"]').click()
driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click()
// 截屏
driver.save_screenshot('toast.png')
driver.get_screenshot_as_file('./toast1.png')
if __name__ == '__main__':
login()