Как создать драйвер для обеих ОС (Android и IOS) на одном скрипте

впервые мне нужно настроить автоматизацию приложения React-native. Приложение разработано для двух ОС: Android и IOS.

Вопрос в том, как получить текущую ОС, которая работает сейчас на устройстве, и установить соответствующий драйвер.

Например: я подключил устройство с операционной системой IOS, нажал кнопку «Выполнить все тесты», и соответствующий драйвер заработал.

Я установил два драйвера типа AppiumDriver, один из которых возвращает драйвер операционной системы Android, а другой - IOS.

Драйвер AppiumDriver; URL appiumUrl = новый URL ("http://0.0.0.0:4723/wd/hub ");

public DriverSettings() throws MalformedURLException {
}


public AppiumDriver getAndroidDriver() {
    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "**TBD**");
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, "**TBD**");
    cap.setCapability(MobileCapabilityType.APP, appUrl);
    cap.setCapability(AndroidMobileCapabilityType.NO_SIGN, true);
    cap.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, true); //set unicodekeyboard in order to support umlauts
    cap.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD, true); //reset keyboard after tests
    cap.setCapability(AndroidMobileCapabilityType.IGNORE_UNIMPORTANT_VIEWS, true); //speeds up tests, as views that are not important i.e. for accessiblity are not shown on android. Is disabled on demand in tests using driver.ignoreunimporantViews
    return driver = new AndroidDriver(appiumUrl, cap);
}

public AppiumDriver getIOSDriver() {

    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "9.3");
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 6");
    cap.setCapability(MobileCapabilityType.APP, appUrl);

    return driver = new IOSDriver(appiumUrl, cap);
}

Итак, как их проверить, прежде чем я проведу все тесты?


person Michael    schedule 04.08.2019    source источник


Ответы (1)


Вы можете сделать один общий метод драйвера, который на основе платформы (iOS или Android) вернет желаемый драйвер.

Сделать это можно так:

private static AppiumDriver<MobileElement> driver;

public AppiumDriver<MobileElement> getDriver(String platformName) {
if (platformName.equals("Android")) {
    // setup the android driver
    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "**TBD**");
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, "**TBD**");
    cap.setCapability(MobileCapabilityType.APP, appUrl);
    cap.setCapability(AndroidMobileCapabilityType.NO_SIGN, true);
    cap.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, true); //set unicodekeyboard in order to support umlauts
    cap.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD, true); //reset keyboard after tests
    cap.setCapability(AndroidMobileCapabilityType.IGNORE_UNIMPORTANT_VIEWS, true); //speeds up tests, as views that are not important i.e. for accessiblity are not shown on android. Is disabled on demand in tests using driver.ignoreunimporantViews
    driver = new AndroidDriver(appiumUrl, cap);
} else if (platformName.equals("iOS")) {
    // setup the ios driver
    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "9.3");
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 6");
    cap.setCapability(MobileCapabilityType.APP, appUrl);
    driver = new IOSDriver(appiumUrl, cap);
}
return driver;
}
person Sameer Arora    schedule 05.08.2019
comment
Да, выглядит неплохо, но вопрос в том, как проверить название платформы? Я пробовал System.getenv (ПЛАТФОРМА); но получать ноль все время - person Michael; 05.08.2019
comment
@Michael Я не думаю, что есть какая-либо команда, которая конкретно сообщала бы, какая платформа подключена к компьютеру. Хотя xcrun instruments -s devices используется для подключения устройств iOS к системе и adb devices для подключения устройств Android. Таким образом, вы можете запустить эти команды и получить устройства и в соответствии с ними установить драйвер. - person Sameer Arora; 06.08.2019