appium+java(八)获取Toast内容信息
前言
Appium中很经典的问题了,在两年前也就是2017年3月6号07:22分,我才看到appium1.6.3版本的发布,更新内容为Ios上可以实现Toast的获取,而Windows也就是安卓端,还需要等待,可惜在那会没有mac本,很遗憾,无法动手尝试,这个问题就一直搁置了,当时还发了个朋友圈记录下当时的心情。如下图:

什么是Toast?
Android中的Toast是一种消息提示弹框,且Toast显示时间有限,一般3秒左右就消失,无法使用定位元素工具定位,且无法被点击操作。
简单理解,就是弹窗提示语,即你操作行为之后给出的提示,比如微信app的登录功能,你输入正确账号,密码,点击登录,会提示正在登录灰色一散而过的信息,如下图:

环境(win10系统)
- Appium:1.15.1
- 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.
ps:没错,就是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、安装appium-uiautomator2-server-v1.12.0.apk、appium-uiautomator2-server-debug-androidTest.apk
去上图目录下,找到这两个apk,安装到手机即可
代码实现
- 初始化中加入如下代码:
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
- 定位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();
}
}
}
实现效果:

appium+java(八)获取Toast内容信息的更多相关文章
- appium获取Toast内容的方法
做自动化测试的时候,可能需要根据弹出的Toast提示来做下一步判断.这里记录一下获取Toast内容的方法,同时巩固一下显示等待的方法之一WebDriverWait. from selenium.web ...
- java提取(获取)博客信息(内容)
package com.wbg.my.service; import java.io.*; import java.net.HttpURLConnection; import java.net.URL ...
- Appium+Python之获取toast
思考:手机APP上的必填或错误文本提示一般1-2s就会消失,比较难定位,所以一般的固定元素定位方式是不可用的,那我们如何定位toast呢? 前提:1.Appium1.6.3以上(包括1.6.3) 2. ...
- Appium+python自动化获取toast消息的方法
转载地址:https://www.cnblogs.com/shangren/p/8191879.html 1. 首先执行这个命令:npm install -g cnpm --registry=http ...
- Appium+python自动化获取toast消息(windows版)的方法
原来用的Appium1.5.3GUI版本,那为什么升级呢? 为了兼容最新版本的iOS10和Android7 Xcode8升级后,将不支持使用UIAutomation,而是改为使用XCUITest了,并 ...
- java反射--获取成员变量信息
获取成员变量信息 代码及说明: public static void printFieldMessage(Object obj) { //要获取类的信息,首先要获取类的类类型 Class c=obj. ...
- Java:获取文件内容
文章来源:https://www.cnblogs.com/hello-tl/p/9139353.html import java.io.*; public class FileBasicOperati ...
- appium自动化测试中获取toast消息的解决方法【转】
http://blog.csdn.net/hqzxsc2006/article/details/50036911 待实践.. 解决方法:appium下切换selendroid模式去获取Android的 ...
- JAVA Socket获取服务端信息
1.Socket.getInetAddress(),获取服务端地址. 2.Socket.getPort(),获取服务端端口.
随机推荐
- SpringSecurity代码实现JWT接口权限授予与校验
通过笔者前两篇文章的说明,相信大家已经知道JWT是什么,怎么用,该如何结合Spring Security使用.那么本节就用代码来具体的实现一下JWT登录认证及鉴权的流程. 一.环境准备工作 建立Spr ...
- [ch04-01] 用最小二乘法解决线性回归问题
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 4.1 最小二乘法 4.1.1 历史 最小二乘法,也叫做 ...
- 使用 cAdvisor 主机上的容器
目录 前言 安装测试 安装 docker 安装docker-ce 启动 cAdvisor 容器 访问测试 prometheus 服务端配置 使用 promtool 检查配置文件 重新加载配置文件 前言 ...
- JS前端将table导出到excel 兼容谷歌 IE 且保留表格样式
CDSN上博主给我一段代码,可将表格导出为EXCEL文档,原文见: https://blog.csdn.net/zz210891470/article/details/94717644 向博主学习.致 ...
- 限定某个目录禁止解析php、限制user_agent、php相关配置
6月1日任务 11.28 限定某个目录禁止解析php11.29 限制user_agent11.30/11.31 php相关配置扩展apache开启压缩 http://ask.apelearn.com/ ...
- linux下创建mysql用户和数据库,并绑定
Linux下输入命令: mysql -uroot -proot123 进入mysql后输入: 查看目前有哪些数据库存在:mysql> SHOW DATABASES; 创建数据库:create s ...
- 使用echarts常用问题总结
1,echarts配合element ui的抽屉插件出现报错,上次解决方法是使用element ui 抽屉的open事件,让在打开事件重新加载,我们项目的需求是点击某个数据,要传递这条数据包含的其他值 ...
- <算法基础><排序>三种高级排序——快速排序,堆排序,归并排序
这三种排序算法的性能比较如下: 排序名称 时间复杂度(平均) 时间复杂度(最坏) 辅助空间 稳定性 快速排序 O(nlogn) O(n*n) O(nlogn) 不稳定 堆排序 O(nlogn) O(n ...
- MongoDB 谨防索引seek的效率问题【华为云技术分享】
目录 背景 初步分析 索引seeks的原因 优化思路 小结 声明:本文同步发表于 MongoDB 中文社区,传送门:http://www.mongoing.com/archives/27310 背景 ...
- 【集合系列】- 深入浅出的分析 Set集合
一.摘要 关于 Set 接口,在实际开发中,其实很少用到,但是如果你出去面试,它可能依然是一个绕不开的话题. 言归正传,废话咱们也不多说了,相信使用过 Set 集合类的朋友都知道,Set集合的特点主要 ...