Appium:Toast元素识别(交易宝)

问题思考
在日常使用App过程中,经常会看到App界面有一些弹窗提示(如下图所示)这些提示元素出现后等待3秒左右就会自动消失,那么我们该如何获取这些元素文字内容呢?
Appium:Toast元素识别(交易宝)_第1张图片

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看到对应的文件:
[email protected]@appium-uiautomator2-driver
[email protected]@appium-uiautomator2-server
Appium:Toast元素识别(交易宝)_第2张图片
安装selenium模块
pip install selenium

安装完成后使用如下命令检测是否安装成功
C:\Users\bella>pip show selenium
Name: selenium
Version: 2.48.0
Summary: Python bindings for Sele
Home-page: https://github.com/Sel
Author: UNKNOWN
Author-email: UNKNOWN
License: UNKNOWN
Location: c:\python35\lib\site-pa
Requires:
Required-by: Appium-Python-Client
Appium:Toast元素识别(交易宝)_第3张图片
selenium模块安装视频教程
测试环境
jdk版本:“1.8.0_05”
appium版本:1.7.2 (不能低于1.6.3)
selenium:3.11.0
测试设备:Android 5.1.1
Python:3.5
测试App:交易宝V6.05

测试场景
进入登录界面输入错误的用户名或者密码,获取Toast内容:
“用户名错误”

代码实现
jibaoyibao_get_toast.py

# coding=utf-8
from jiaoyibao.jiaoyibao_capability import driver
from selenium.webdriver.support.ui import WebDriverWait

driver.find_element_by_id('com.konsonsmx.iqdii:id/tvMMDL').click()  # 切换密码登录按钮,用密码登录的方式登录交易宝
driver.find_element_by_id('com.konsonsmx.iqdii:id/et_account').clear()  # 清空输入框的用户名

driver.find_element_by_id('com.konsonsmx.iqdii:id/et_account').send_keys('55555')  # 得到用户名
driver.find_element_by_id('com.konsonsmx.iqdii:id/et_password').send_keys('123456keke')  # 得到密码
driver.find_element_by_id('com.konsonsmx.iqdii:id/bt_login').click()  # 点击登录按钮

error_message="用户名错误"
message='//*[@text=\'{}\']'.format(error_message)
toast_element=WebDriverWait(driver,5).until(lambda x:x.find_element_by_xpath(message))
print(toast_element.text)

附加代码:
jiaoyibao_capability.py

from appium import webdriver    #导入appium包
from selenium.common.exceptions import NoSuchElementException

desired_caps={}     #定义一个字典,用来存储capablity的相关信息
desired_caps['platformName']='Android'      #设备平台的名称
desired_caps['deviceName']='127.0.0.1:62025'        #设备名称
desired_caps['platforVersion']='5.1.1'      #设备的版本号


desired_caps['app']=r'C:\Users\bella\Desktop\20180922\jiaoyibao.apk'        #获取包路径
desired_caps['appPackage']='com.konsonsmx.iqdii'        #获取包名
desired_caps['appActivity']='com.konsonsmx.market.module.base.ui.FlashADActivity'   #获取activity启动

desired_caps['noReset']='true'  #模拟用户非首次启动
desired_caps['unicodeKeyboard']="true"  #登录用了中文,代码要做配置
desired_caps['resetKeyboard']="true"    #重置键盘也要设置为true

driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)    #启动服务
driver.implicitly_wait(2)   #启动后等待2秒

def check_skipBtn():
    print("check_skipBtn")
    try:
        skipBtn = driver.find_element_by_id('com.konsonsmx.iqdii:id/tvCountDown')
    except NoSuchElementException:
        print('no skipBtn')  #当没有这个元素就打印出no cancelBtn
    else:
        skipBtn.click()  #存在这个元素就去点击

def check_loginBtn():
    print("check_loginBtn")
    try:
        loginBtn = driver.find_element_by_id('com.konsonsmx.iqdii:id/ib_title_left')
    except NoSuchElementException:
        print('no loginBtn')  #当没有这个元素就打印出no cancelBtn
    else:
        loginBtn.click()  #存在这个元素就去点击
check_skipBtn()
check_loginBtn()

参考资料
Appium appium1.6.3 发布支持 toast 识别

你可能感兴趣的:(Appium学习,工作实践)