toast介绍
- toast:简易的消息提示框
- 为了给当前视图显示一个浮动的显示块,与dialog不同,它永远不会获得焦点
- Toast类的思想:尽可能不引人注意,同时还向用户显示信息希望他们看到
- Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失
- Toast本身是个系统级别的控件,它归属于系统settings,当一个app发送消息的时候,不是自己造出来的这个弹框,它是发给系统,由系统统一进行弹框,这类的控件不在app内,需要特殊的控件识别方法
toast定位
- appium使用uiautomator底层的机制来分析抓取toast,并且把toast放到控件树里面,但本身并不属于控件
- capabilities中添加设置 automationName:uiautomator2
– appium本身的设置就自带的,不需要额外添加,默认就是uiautomator2 - getPageSource是无法找到的??存疑
- 必须使用xpath查找
– //[@class=‘android.widget.Toast’]
– //[contains(@text,“XXX”)]
例子
import time
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
class TestToast:
def setup(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = 'true'
desired_caps['appPackage'] = 'io.appium.android.apis'
desired_caps['appActivity'] = 'io.appium.android.apis.view.PopupMenu1'
desired_caps['noReset'] = "true"
desired_caps['automationName'] = "uiautomator2"
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_toast(self):
self.driver.find_element(MobileBy.ACCESSIBILITY_ID, 'Make a Popup!').click()
self.driver.find_element(MobileBy.ID, 'android:id/title').click()
print(self.driver.find_element(MobileBy.XPATH, '//*[@class="android.widget.Toast"]').text)
print(self.driver.find_element(MobileBy.XPATH, '//*[contains(@text, "Clicked popup")]').text)