在Appium中动态选择驱动程序类型以编写“混合”测试

时间:2018-08-21 08:30:21

标签: java appium

我将Appium与Java结合使用来自动执行针对移动应用程序的测试。显然,当我想为Android编写测试时,我使用AndroidDriver<MobileElement> driver = [..],而对于iOS,我需要使用IOSDriver<MobileElement> driver = [..],尽管使用这种方法,我需要为iOS和Android编写两次相同的测试。有没有一种方法可以让我根据AndroidDriveriOSDriver之间进行选择的某种变量来动态选择Appium Driver的类型?我尝试过:

if(platform == "Android"){
    //returns AndroidDriver
    AppiumDriver<MobileElement> driver = COMMON.startAndroid(name, id, platform, version);
} else {
    //returns IOSDriver
    AppiumDriver<MobileElement> driver = COMMON.startIOS(name, id, platform, version);
}

但是下面在Test Eclipse中指出,这种方法driver尚未定义

2 个答案:

答案 0 :(得分:1)

这两个驱动程序均扩展了WebDriver接口(通过继承)。您可以从这种类型定义驱动程序。它也是OOP encapsulation concept

WebDriver driver;
if(platform.equals("Android")){
    driver = COMMON.startAndroid(name, id, platform, version);
} else {
    driver = COMMON.startIOS(name, id, platform, version);
}

答案 1 :(得分:0)

public class AppiumController {


public static OS executionOS = OS.ANDROID;
public AppiumDriver<MobileElement> driver;
DesiredCapabilities capabilities = new DesiredCapabilities();

public enum OS {
    ANDROID,
    IOS,
    MOBILEBROWER_IOS,
    MOBILEBROWER_ANDROID
}

public void start() {

    if (driver != null) {
        return;
    }

    switch(executionOS){
    case ANDROID: 
        // set android caps
        driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

    case IOS:
        // set ios caps
        driver = new IOSDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

    case MOBILEBROWER_IOS:
        // set ios browser caps
        driver = new IOSDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

    case MOBILEBROWER_ANDROID:
        // set android browser caps
        driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

    }
}

public void stop() {
    if (driver != null) {
        driver.quit();
        driver = null;
    }
}

}