Appium中如何获取Toast内容信息
Posted 程序员小捣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Appium中如何获取Toast内容信息相关的知识,希望对你有一定的参考价值。
前言
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版本提示了
5、安装appium-uiautomator2-driver
cnpm install appium-uiautomator2-driver
安装成功后,可以在下面路径看到对应的文件。
路径:C:\\Users\\Administrator\\node_modules
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();
}
}
}
最后:【可能给予你一定的帮助】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
关注我的微信公众号【软件测试小dao】免费获取~
我的学习交流群:644956177 群里有技术大牛一起交流分享~
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
以上是关于Appium中如何获取Toast内容信息的主要内容,如果未能解决你的问题,请参考以下文章