App Center 上的 Appium 无法在 iOS 和 Android 之间切换 (Java)

Appium on App Center can't switch between iOS and Android (Java)

当我在 App Center 上专门针对 运行 编写 appium 测试时(因此必须使用自定义 'Enhanced Driver'),看起来我只能将 driver 声明为 EnhancedAndroidDriver 类型,或 EnhancedIOSDriver 类型。

    public EnhancedAndroidDriver<MobileElement> driver;
//    public EnhancedIOSDriver<MobileElement> driver; <----- can't declare same variable twice

public AppiumDriver<MobileElement> getDriver() throws IOException {
        String PLATFORM_NAME = System.getenv("XTC_PLATFORM");
        if (PLATFORM_NAME.equals("Android")) {
            EnhancedAndroidDriver<MobileElement> androiddriver = Factory.createAndroidDriver(new URL("http://localhost:4723/wd/hub"), caps);
            driver = androiddriver;
        } else if (PLATFORM_NAME.equals("iOS")) {
            EnhancedIOSDriver<MobileElement> iosdriver = Factory.createIOSDriver(new URL("http://localhost:4723/wd/hub"), caps);
            driver = iosdriver;  <---- compiler error, wrong type
        }
        return driver;
    }

我想 运行 在单个文件中进行一个简单的测试,该文件将在两个平台上 运行,但似乎我必须选择 android 或 ios该文件到 运行 上。如何避免复制所有测试文件?我正在使用本机反应,我的应用程序在两个平台上基本相同。我对常规的 AppiumDriver 做了类似的事情。

关于以编程方式切换 'EnhancedIOS/AndroidDriver' 变量 driver 在 Java 中引用的类型的任何建议??

使用常规的 AppiumDriver,我可以这样做:

private static AppiumDriver<MobileElement> driver;

public AppiumDriver<MobileElement> getDriver() throws IOException {
    if (PLATFORM_NAME.equals("Android")) {
       driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    } else if (PLATFORM_NAME.equals("iOS")) {
       driver = new IOSDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }
    return driver;
}

然后在测试中通用使用驱动程序。但似乎不可能对 App Center Enhanced 驱动程序采用这种方法,因为它们不共享通用类型(或者我对 Java 的了解还不够多,无法弄清楚)。有什么办法可以解决这个问题吗??

我最终编写了一个包装驱动程序的接口,它为我使用的每个驱动程序方法在平台特定驱动程序上实例化和操作,并允许我在其余部分使用通用名称驱动程序来引用它测试框架。

我在实例化接口的时候把平台名传给了接口。平台名称被读取为我在 App Center 分支构建设置中设置的环境变量。