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 演示代码
# 设置 capabilitiescaps = {}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']"#打印totastXPathprint(driver.find_element_by_xpath(toastXPath))#打印toastXPath 获取的textprint(driver.find_element_by_xpath(toastXPath).text)
复制代码
(2)Java 演示代码
@BeforeAllpublic 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);}
@Testpublic 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 SearchPASSED:testToast
复制代码
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论