Toast 是 Android 系统中的一种消息框类型,它属于一种轻量级的消息提示框类型,常常以小弹框的形式出现,一般出现 1~2 秒回自动消失。它可以出现在屏幕中任意位置。它不同于 Dialog(对话框),它没有焦点。Toast 的设计思想是尽可能地不引人注意,同时还想用户显示信息,并希望用户可以看到。
测试 App 下载地址:
https://GitHub 网站/appium/sample-code/raw/master/samlpe-code/apps/ApiDemos/bin/ApiDemos-debug.apk。
首先将上面地址的 apk 包下载到本地计算机上,并安装到模拟器中;在模拟器中打开 API Demos,依次点击 “ Views” →“Popup Menu” →“Make a Popup”→“Search”项,就会弹出消息提示框,如图 5-18 所示。
图 5-18 中“Clicked popup menu item Search”就是 Toast,它通常在页面上停留的时间只有 2 秒左右,测试中用 Appium Inspector 一般不容易获取到这个提示框元素。
2.获取 Toast
在模拟器中打开 API Demos,依次点击 “ Views” →“Popup Menu”→ “Make a Popup”→“Search”项,查找页面的 Toast 元素。
示例代码如下(Python 版和 Java 版)
(1)Python 演示代码
# 设置 capabilities
caps = {}
caps["platformName"] = "Android"
caps["appPackage"]="io.appium.android.apis"
caps["appActivity"] = ".ApiDemos"
#必须使用 UiAutomator2框架
caps["automatorName"]="uiautomator2"
caps["deviceName"]="hogwarts"
#与Appium Server 建立连接
driver = webdriver.Remote("http://localhost:4723/wd/hub",caps)
#设置隐式等待
driver.implicitly_wait(5)
#点击Views项
driver.find_element_by_accessibility_id("Views").click()
#滑动页面
TouchAction(driver).press(380,1150)\
.move_to(380,150).release().perform()
#点击'Popup Menu'项目
driver.find_element_by_xpath(
"///[@content-desc='Popup Menu']").click()
#点击'Make a Popup!'项
driver.find_element_bu_xpath(
"//*[@content-desc=='Make a Popup!']").click()
#点击'Search'项
driver.find_element_by_xpath("//*[contains(@test,'Search')]").click()
toastXPath = "//*[@class='android.wight.Toast']"
#打印totastXPath
print(driver.find_element_by_xpath(toastXPath))
#打印toastXPath 获取的text
print(driver.find_element_by_xpath(toastXPath).text)
复制代码
(2)Java 演示代码
@BeforeAll
public static void setuo() throws MalformedURLException{
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("platfromName","Android");
desiredCapabilities.setCapability("appPackage","io.appium.android.apis");
desiredCapabilities.setCapability("appActivity",".ApiDemos");
desiredCapabilities.setCapability("automationName","uiautomator2");
desiredCapabilities.setCapability("deviceName","hogwarts");
URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub");
driver = new AndroidDriver(remoteUrl,desiredCapabilities);
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
}
@Test
public void toastTest(){
//点击Views项
driver.findElement(MobileBy.AccessibilityId("views")).click();
//滑动页面
TouchAction action = new TouchAction(driver);
PointOption pressPointOne = PointOption.point(380,1150);
PointOption pressPointOne = pointOption.point(380,150);
action.press(pressPointOne).moveTo(movePointOne).release();
//点击'Popup Menu'项目
driver.findElement(By.xpath("//*[@contest-desc='Popup Menu']")).click();
//点击'Make a Popup!'项目
driver.findElement(By.xpath("//*[@content-desc='Make a Popup!']")).click();
//点击'Search'项
driver.findElement(By.xpath"//*[@contains(@text,'Search')"])).click();
By toastXPath = By.xpath("//*[@class='android.widget.Toast']");
//打印 toastXPath
System.out.println(driver.findElement(toastXPath));
//打印 toastXPath 获取的text
System.out.println(driver.findElement(toastXPath));
//打印 toastXPath获取的text
System.out.println(driver.findElement(toastXPath).getText());
}
复制代码
上述代码中定位 Toast 使用了 XPath 表达式,因为 Toast 的 class 属性比较特殊,页面中一般会出现一次 class=“android.widget.Toast”的元素,所以使用 XPath 定位方式搭配隐式等待就可以很轻松地定位到 Toast。
上述代码执行结果如下。
[[Android: uiautomator2] -> xpath://*[@class='android.widget.Toast']]
Clicked popup menu item Search
PASSED:testToast
复制代码
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论