干貨|APP自動(dòng)化Android特殊控件Toast識(shí)別
Toast 是 Android 系統(tǒng)中的一種消息框類型,它屬于一種輕量級(jí)的消息提示,常常以小彈框的形式出現(xiàn),一般出現(xiàn) 1 到 2 秒會(huì)自動(dòng)消失,可以出現(xiàn)在屏幕上中下任意位置。它不同于 Dialog,它沒(méi)有焦點(diǎn)。Toast 的設(shè)計(jì)思想是盡可能的不引人注意,同時(shí)還向用戶顯示信息希望他們看到。
測(cè)試 APP 下載地址:
首先將上面地址的 apk 包下載到本地,并安裝到模擬器中;在模擬器中打開(kāi) API Demos,依次點(diǎn)擊“Views”-“Popup Menu”-“Make a Popup”-“Search”,就會(huì)彈出消息提示框,如圖:

上圖中 “Clicked Popup menu item Search” 就是 Toast,但它通常在頁(yè)面上停留的時(shí)間只有 2 秒左右,通過(guò) Appium Inspector 一般不容易獲取到這個(gè)元素。
獲取Toast
在模擬器中打開(kāi) API Demos 應(yīng)用,依次點(diǎn)擊 “Views”-“Popup Menu”-“Make a Popup”-“Search”,查看頁(yè)面 Toast 元素。
設(shè)置capabilities
caps = {}?
caps["platformName"] = "android"?
caps["deviceName"] = "TestToast"
caps["appPackage"] = "io.appium.android.apis"
caps["appActivity"] = ".ApiDemos"?
#必須使用uiautomator2框架
caps["automationName"] = "uiautomator2"?
caps["udid"] = "192.168.56.101:5555"?
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)?
# 點(diǎn)擊 Views
driver.find_element_by_accessibility_id("Views").click()
?time.sleep(2)
?# 滑動(dòng)頁(yè)面
TouchAction(driver).long_press(380, 1150)?
.move_to(380, 150).release().perform()?
# 點(diǎn)擊 `Popup Menu` 項(xiàng)目
driver.find_element_by_xpath(
?"//*[@content-desc='Popup Menu']").click()
sleep(2)
# 點(diǎn)擊 `Make a Popup`
driver.find_element_by_xpath(?
??"//*[@content-desc='Make a Popup!']").click()
sleep(2)?
# 點(diǎn)擊 'Search'?
driver.find_element_by_xpath("//*[contains(@text,'Search')]").click()
toastXPath = "//*[@class='android.widget.Toast']"
#打印 toastXPath
print(driver.find_element_by_xpath(toastXPath))?
#打印 toastXPath 獲取的 text
print(driver.find_element_by_xpath(toastXPath).text)
這里定位 Toast 使用了 Xpath 表達(dá)式進(jìn)行定位,因?yàn)?Toast 的 class 屬性比較特殊,在當(dāng)前頁(yè)面上一般會(huì)出現(xiàn)一次class=“android.widget.Toast” 的元素,所以使用 Xpath 定位方式,很輕松的可以定位到。

消息提示Toast獲取方法就講完了,大家學(xué)會(huì)了么?我們下一期為大家講解app自動(dòng)化中的屬性獲取與斷言,有興趣的小伙伴可以關(guān)注一下哦!