写点什么

软件测试 | 控制特殊 Toast 识别

  • 2023-02-17
    北京
  • 本文字数:1989 字

    阅读完需:约 7 分钟

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 霍格沃兹的干货都很硬核

用户头像

社区:ceshiren.com 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | 控制特殊Toast识别_测试_测吧(北京)科技有限公司_InfoQ写作社区