• 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.0

    ps:没错,就是1.10.0版本的好用,降版本操作

    再输入:appium -v,此时应该就有1.10.0版本提示了

    6、安装appium-uiautomator2-driver

    cnpm install appium-uiautomator2-driver

    安装成功后可以在 C:UsersAdministrator ode_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();
            }
        }
    }

      实现效果:

     

  • 相关阅读:
    Balance的数学思想构造辅助函数
    1663. Smallest String With A Given Numeric Value (M)
    1680. Concatenation of Consecutive Binary Numbers (M)
    1631. Path With Minimum Effort (M)
    1437. Check If All 1's Are at Least Length K Places Away (E)
    1329. Sort the Matrix Diagonally (M)
    1657. Determine if Two Strings Are Close (M)
    1673. Find the Most Competitive Subsequence (M)
    1641. Count Sorted Vowel Strings (M)
    1679. Max Number of K-Sum Pairs (M)
  • 原文地址:https://www.cnblogs.com/longronglang/p/11870097.html
Copyright © 2020-2023  润新知