一、前置说明
toast消失的很快,并且通过uiautomatorviewer也不能获取到它的定位信息,如下图:
二、操作步骤
toast的class name值为android.widget.Toast
,虽然toast消失的很快,但是它终究是在Dom结构中出现过,所以我们可以使用xpath来定位toast元素:
def get_toast(self, text=None, timeout=3, interval=0.5): # 如果同时出现多个toast,可以使用这种方式 if text: return WebDriverWait(self, timeout, interval).until( EC.presence_of_element_located(('xpath', f'//*[contains(@text, "{text}")]'))) return WebDriverWait(self, timeout, interval).until( EC.presence_of_element_located(('xpath', '//*[@class="android.widget.Toast"]')))
三、Demo验证
注意:appium在v1.6.3以上才支持获取toast,并且需要指定使用Uiautomator2库。
def test_get_toast(): import logging logging.basicConfig(level=logging.DEBUG) from driver.appium.driver import WebDriver appium_server_url = 'http://localhost:4723' capabilities = { "platformName": "Android", "automationName": "uiautomator2", # 注意:要指定uiautomator2 "deviceName": "127.0.0.1:62001", "app": "D:\\resources\\ApiDemos-debug.apk", } driver = WebDriver(command_executor=appium_server_url, capabilities=capabilities) driver.smart_find_element(by='text', value='App').click() driver.smart_find_element(by='text', value='Notification').click() driver.smart_find_element(by='text', value='NotifyWithText').click() driver.smart_find_element(by='text', value='SHOW SHORT NOTIFICATION').click() element = driver.get_toast('Short notification') assert element.text == 'Short notification'
日志输出:
============================= test session starts ============================= collecting ... collected 1 item test_appium.py::test_get_toast PASSED ============================= 1 passed in 19.91s ==============================