0

当我专门编写 appium 测试以在 App Center 上运行时(因此必须使用自定义的“增强驱动程序”),看起来我只能声明driverEnhancedAndroidDriver类型或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 做了类似的事情。

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

使用常规的 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 的了解不够,无法弄清楚)。有没有办法解决这个问题?

4

1 回答 1

0

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

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

于 2022-01-28T20:29:00.533 回答