Appium中如何获取Toast内容信息?

发表于:2019-12-19 17:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:糖小幽    来源:软件测试君

#
Appium
分享:
  前言
  Toast内容获取信息,这是Appium中很经典的问题了。
  在两年前也就是2017年3月6号07:22分,我才看到appium1.6.3版本的发布,更新内容为Ios上可以实现Toast的获取,而Windows也就是安卓端,还需要等待,可惜在那会没有Mac本,很遗憾,无法动手尝试,这个问题就一直搁置了。
  什么是Toast?
  Android中的Toast是一种消息提示弹框,且Toast显示时间有限,一般3秒左右就消失,无法使用定位元素工具定位,且无法被点击操作。
  简单理解,就是弹窗提示语,即你操作行为之后给出的提示,比如微信app的登录功能,你输入正确账号,密码,点击登录,会提示正在登录灰色一散而过的信息,如下图:
  环境
  √Windows10
  xAppium:1.15.1(10.0支持)
  √JAVA Client:6.1.0
  √JAVA:1.8
  √Android模拟器:7.0
  √SDK
  准备工作
  必须命令安装,客户端desktop这种肯定不行,就别试验了,卸载客户端
  1、先卸载最新版本的appium
 npm unistall -g appium
  2、查看电脑中还有没有appium
 appium -v
  3、如没有,需要npm安装检验appium版本验证
 appium -v
  如果第二步还存在,说明appium安装到其他目录下了,查看appium路径:which appium,此时可能会输出路径为【/usr/local/bin/appium】,进到这个目录下手动删除appium文件夹,再输入:appium -v,此时应该就没有,提示:zsh: command not found: appium
  4、再重新安装appium指定版本
 cnpm install -g appium@1.10.0
  再输入:appium -v,此时应该就有1.10.0版本提示了
  6、安装appium-uiautomator2-driver
 cnpm install appium-uiautomator2-driver
  
安装成功后,可以在下面路径看到对应的文件。
  路径:C:\Users\Administrator\node_modules
   _appium-uiautomator2-driver@1.12.0@appium-uiautomator2-driver
  _appium-uiautomator2-server@1.10.0@appium-uiautomator2-server
  
   7、安装两个apk
  appium-uiautomator2-server-v1.12.0.apk
  appium-uiautomator2-server-debug-androidTest.apk
  去上图目录下,找到这两个apk,安装到手机即可
  代码实现
  1、初始化中加入如下代码:
 capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
  2、定位toast元素
  具体示例代码:
   import io.appium.java_client.android.AndroidDriver;
  import io.appium.java_client.remote.AutomationName;
  import io.appium.java_client.remote.MobileCapabilityType;
  import org.apache.commons.io.FileUtils;
  import org.openqa.selenium.By;
  import org.openqa.selenium.OutputType;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.WebElement;
  import org.openqa.selenium.remote.DesiredCapabilities;
  import org.openqa.selenium.support.ui.ExpectedCondition;
  import org.openqa.selenium.support.ui.ExpectedConditions;
  import org.openqa.selenium.support.ui.WebDriverWait;
  import org.testng.Assert;
  import org.testng.TestNGException;
  import org.testng.annotations.AfterClass;
  import org.testng.annotations.BeforeClass;
  import org.testng.annotations.Test;
  import java.io.File;
  import java.io.IOException;
  import java.net.URL;
  import java.util.List;
  import java.util.concurrent.TimeUnit;
  /**
  * @author rongrong
  * 获取toast信息
  */public class TestGetToast {
  AndroidDriver<WebElement> driver;
  @BeforeClass(alwaysRun = true)
  public void setUp() throws Exception {
  DesiredCapabilities capabilities = new DesiredCapabilities();
  capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "127.0.0.1:62001");
  capabilities.setCapability("platformName", "Android");
  capabilities.setCapability("deviceName", "Android Emulator");
  // 设置app的主包名和主类名(要启动应用包名和activity)
  capabilities.setCapability("appPackage", "com.tencent.mm");
  //app包名
  capabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI");
  //要启动的Android Activity名
  capabilities.setCapability("appActivity", ".ui.LauncherUI");
  capabilities.setCapability("noReset", true);
  capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
  // driver实例
  driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  }
  /**
  * 登录功能验证
  */
  @Test
  public void testGetToast() {
  try {
  driver.findElement(By.id("d0v")).click();
  driver.findElement(By.id("dc")).click();
  pause(1);
  driver.findElement(By.id("d0o")).click();
  pause(1);
  List<WebElement> elements = driver.findElements(By.id("m6"));
  elements.get(0).sendKeys("1");
  elements.get(1).sendKeys("1");
  pause(1);
  driver.findElement(By.id("d0p")).click();
  WebElement element = new WebDriverWait(driver, 30).until(new ExpectedCondition<WebElement>() {
  public WebElement apply(WebDriver driver) {
  return driver.findElement(By.xpath("//*[contains(@text, '正在')]"));
  }
  });
  String toast = element.getText();
  System.out.println("toast : " + toast);
  driver.findElement(By.id("b47")).click();
  } catch (AssertionError e) {
  Assert.fail(getClass().getName() + " >> " + e.getMessage());
  } catch (Exception e) {
  throw new TestNGException(getClass().getName() + e.getMessage(), e);
  }
  }
  @AfterClass
  public void afterTestStopDriver() {
  driver.quit();
  }
  /**
  * 程序暂停几秒
  *
  * @param i
  */
  public void pause(int i) {
  try {
  Thread.sleep(i * 1000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  }
  }
  实现效果

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号