【问题标题】:How to create driver for both OS (Android and IOS) on one script如何在一个脚本上为两个操作系统(Android 和 IOS)创建驱动程序
【发布时间】:2019-12-12 06:26:36
【问题描述】:

我第一次需要设置 React-native 应用自动化。 该应用程序是为两个操作系统开发的,android 和 IOS。

问题是如何获取设备上正在运行的当前操作系统,并设置相关的驱动程序。

例如:我连接了一个IOS操作系统的设备,点击“Run All Tests”按钮,相关驱动就开始运行了。

我设置了两个 AppiumDriver 类型的驱动程序,一个返回 Android 操作系统驱动程序,另一个返回 IOS。

AppiumDriver 驱动程序; 网址 appiumUrl = 新网址("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);
}

那么在我运行所有测试之前如何检查?

【问题讨论】:

    标签: android ios automation appium cross-platform


    【解决方案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;
    }
    

    【讨论】:

    • 是的,它看起来不错,但问题是如何检查平台名称?我试过 System.getenv("PLATFORM");但一直收到 null
    • @Michael 我不认为有任何命令可以明确告诉哪个平台连接到电脑。虽然xcrun instruments -s devices 用于将iOS 设备连接到系统,adb devices 用于连接android 设备。因此,您可以运行这些命令并获取设备并根据设置驱动程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 2017-07-17
    • 2019-11-22
    • 2022-11-29
    相关资源
    最近更新 更多