toast是Android系统中一种消息框类型,比如很多APP点击一次返回,会有个灰色弹出框提示:“再次点击退出XX”这样的消息,这个弹出框就是toast。
那么如何获取到toast显示的内容呢?
appium找toast和找普通的控件没有太大的区别,但是需要先装个东西:
cnpm install appium-uiautomator2-driver
然后连接手机或者driver的代码里面增加一个键值对:
‘automationName‘: ‘Uiautomator2‘,
‘Uiautomator2‘是一个可以识别安卓UI界面控件的框架,之前都是使用的‘Uiautomator‘。
比如我们进入华为手机的文件管理页面,点击返回,会提示:再次点击即可退出,怎么获取到这个提示呢?
代码如下:
import time from appium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait """连接手机,获取driver""" server = r‘http://localhost:4723/wd/hub‘ # Appium Server, 端口默认为4723 desired_capabilities = { # 设备信息 ‘platformName‘: ‘Android‘, ‘deviceName‘: ‘127.0.0.1:62001‘, ‘platformVersion‘: ‘5.1.1‘, # app信息 ‘appPackage‘: ‘ com.cyanogenmod.filemanager‘, ‘appActivity‘: ‘.activities.NavigationActivity‘, # 中文问题 ‘unicodeKeyboard‘: True, ‘reserKeyBoard‘: True, # 测试完毕退出后不清理APP缓存 ‘noReset‘: True, ‘fullReset‘: False, # toast ‘automationName‘: ‘Uiautomator2‘ } # 声明对象 driver = webdriver.Remote(server, desired_capabilities) # 连接手机和APP def find_toast(message): message = "//*[contains(@text, ‘" + message + "‘)]" ele = WebDriverWait(driver, 5, 0.1).until(lambda x : x.find_element(By.XPATH, message)) return ele.text time.sleep(3) driver.press_keycode(4) # 点击返回按钮,适用于Uiautomator2框架 # driver.keyevent(4) # 适用于Uiautomator1框架 print(find_toast(‘退出‘))