Appium中如何获取Toast内容信息

17 篇文章 2 订阅
13 篇文章 1 订阅

前言

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();
        }
    }
}

在这里插入图片描述
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

在这里插入图片描述

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

自学推荐B站视频:

零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值