Toast 是什么
-
一种消息框类型
-
永远不会获得焦点
- 无法被点击
-
Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失
-
是系统级别的控件,属于系统settings
-
Toast类的思想:
- 就是尽可能不引人注意,同时还向用户显示信息,希望他们看到
Toast 定位
- appium 用的是uiautomator底层来抓取toast,
- 再把toast放到控件树内,但是它本身不属于空间
- 使用的是uiautomator2
Toast 定位
-
xpath
可以找到 ``` //*[@class="android.widget.Toast"]//*[contains(@text,"xxx")] ``` xxx:toast的文本内容
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(50)); driver.findElement(AppiumBy.xpath("//*[@class=\"android.widget.Toast\"]"));
演示结果
adb shell dumpsys window | findstr mCurrent
# _*_ coding:utf-8 _*_
# @Author : Sam
from appium import webdriver
from appium.options.common import AppiumOptions
from appium.webdriver.common.appiumby import AppiumBy
class TestTost:
def setup_class(self):
# 设置启动参数
print("setup_class")
# 定义一个字典
caps = {}
# 设置 app 安装平台
caps["platformName"] = "Android"
# 设置 app 安装平台的版本
caps["platformVersion"] = "6"
# 设备的名字
caps["deviceName"] = "127.0.0.1:7555"
# 设置 app 的包名
caps["appPackage"] = "io.appium.android.apis"
# 设置 app 启动页 adb logcat ActivityManager:I | findstr "cmp"
caps["appActivity"] = "io.appium.android.apis.view.PopupMenu1"
# 不清空缓存
# caps["noReset"] = True
# tost 使用:automationName : uiauromator2 工作引擎 默认自带
# 实例化 appiumOptions 对象
self.options = AppiumOptions().load_capabilities(caps)
# 连接 appium server
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", options=self.options)
# 设置全局的隐式等待
self.driver.implicitly_wait(10)
def teardown_class(self):
# 退出app
self.driver.quit()
def test_tost(self):
self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Make a Popup!").click()
self.driver.find_element(AppiumBy.XPATH, "//*[@text='Search']").click()
# print(self.driver.page_source)
# print(self.driver.find_element(AppiumBy.XPATH, "//*[@class='android.widget.Toast']").text)
self.driver.find_element(AppiumBy.XPATH, "//*[contains(@text, 'Clicked popup menu item Search')]")