appium-flutter-driver 测试flutter_boost项目_Java语言

flutter_boost混合了原生代码和flutter代码,会涉及到flutter和原生界面的跳转。

使用IDEA创建项目:

 然后finsh即可。

导入appium-flutter-driver代码

目前appium-flutter-driver还没有放到mvn repository上,所以,我这里是将appium-flutter-driver的kotlin代码拷贝到我的项目里了。

 github地址:https://github.com/truongsinh/appium-flutter-driver/tree/master/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter

 在pom.xml上添加依赖:

复制代码
    <!--添加依赖 -->
    <dependencies>

        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>7.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

        <dependency>
            <groupId>org.jetbrains.kotlinx</groupId>
            <artifactId>kotlinx-serialization-runtime</artifactId>
            <version>0.20.0</version>
        </dependency>

    </dependencies>
复制代码

编写测试代码:

复制代码
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import org.openqa.selenium.remote.DesiredCapabilities;
import pro.truongsinh.appium_flutter.FlutterFinder;
import pro.truongsinh.appium_flutter.finder.FlutterElement;

import java.io.File;

public class AppiumTestDemo {
    public static String appPtah = "/flutterboost-debug.apk";

    public static void main(String[] args) {
        File rootFile = new File("");
        System.out.println("测试app文件路径:" + rootFile.getAbsolutePath());
        File appFile = new File(rootFile.getAbsolutePath() + appPtah);
        System.out.println("测试app文件路径:" + appFile.getAbsolutePath());
        appPtah = appFile.getAbsolutePath();

        AndroidDriver<MobileElement> driver = getFlutterDriver();

        // 切换成本地的代码
        driver.context("NATIVE_APP");

        MobileElement openNativeWebElement = driver.findElementById("com.taobao.idlefish.flutterboostexample:id/open_flutter");
        openNativeWebElement.click();
        System.out.println("点击完成跳转至flutter页面完成");

        // 切换成flutter端的代码
        driver.context("FLUTTER");

        FlutterFinder find = new FlutterFinder(driver);
        FlutterElement buttonFinder = find.byValueKey("openFirstPage");
        buttonFinder.click();

        System.out.println("openFirstPage页面完成");

        try {
            Thread.sleep(50000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        driver.quit();
    }

    public static AndroidDriver<MobileElement> getFlutterDriver() {
        System.out.println("getFlutterDriver");

        DesiredCapabilities flutterCapabilities = new DesiredCapabilities();
        flutterCapabilities.setCapability("platformName", "Android");
        flutterCapabilities.setCapability("deviceName", "one plus");
        flutterCapabilities.setCapability("app", appPtah);
        flutterCapabilities.setCapability("platformVersion", "10");
        flutterCapabilities.setCapability("noReset", true);
        flutterCapabilities.setCapability("automationName", "Flutter");

        AppiumDriverLocalService service = AppiumDriverLocalService.buildDefaultService();
        AndroidDriver<MobileElement> driver = new AndroidDriver<MobileElement>(service.getUrl(), flutterCapabilities);

        System.out.println("getFlutterDriver finish");
        return driver;
    }
}
复制代码

代码已经上传到github上了:

https://github.com/hbolin/AppiumFlutterBoostTest

 

posted @   柏。  阅读(2234)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示