代码之家  ›  专栏  ›  技术社区  ›  jerimiah797

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

  •  0
  • jerimiah797  · 技术社区  · 3 年前

    当我专门为在App Center上运行而编写appium测试时(因此必须使用自定义的“增强驱动程序”),看起来我只能声明 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”的建议 驾驶员 在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的了解不够,无法弄清楚)。有办法解决这个问题吗??

    0 回复  |  直到 3 年前
        1
  •  0
  •   jerimiah797    3 年前

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

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