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



当我专门编写appium测试以在App Center上运行时(因此必须使用自定义的'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为该文件运行。我如何避免复制所有的测试文件?我使用的是react native,我的应用在两个平台上基本相同。我已经用常规的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的了解不够,无法弄清楚)。有办法解决这个问题吗?

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

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

最新更新