【问题标题】:how to Make selectable appPackage and appActivity BeforeScenario in android Appium Test Automation如何在 android Appium 测试自动化中制作可选择的 appPackage 和 appActivity BeforeScenario
【发布时间】:2020-05-16 00:26:10
【问题描述】:

我想在@BeforeScenario 中选择启动app(appPackage,appActivity) 来为一个测试项目中的多个应用开发测试场景。我知道使用启动活动,但由于安全权限被拒绝,我无法使用它。唯一的工作方法是使用 beforeScenario 中的功能。在开始测试之前,我想选择启动应用程序。我的代码:

`@BeforeScenario public void beforeScenario() 抛出 MalformedURLException {

    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
    desiredCapabilities
            .setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
    desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "device");
    desiredCapabilities.setCapability(MobileCapabilityType.UDID, "L2N4C19924005752");
    if (localAndroid) {
        logger.info("Local Browser");


        desiredCapabilities
                .setCapability(AndroidMobileCapabilityType.APP_PACKAGE,
                        notapadAppPackageName);
        desiredCapabilities
                .setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,
                        notepadAppActivityName);

    }

    desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
    desiredCapabilities.setCapability(MobileCapabilityType.NO_RESET, true);
    desiredCapabilities.setCapability(MobileCapabilityType.FULL_RESET, false);
    desiredCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300);
    desiredCapabilities.setCapability("unicodeKeyboard", false);
    desiredCapabilities.setCapability("appWaitDuration", 30);
    desiredCapabilities.setCapability("resetKeyboard", false);
    URL url = new URL("http://localhost:4723/wd/hub");
    appiumDriver = new AndroidDriver(url, desiredCapabilities);

    selector = SelectorFactory
            .createElementHelper(localAndroid ? SelectorType.ANDROID : SelectorType.IOS);
    appiumDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    appiumFluentWait = new FluentWait(appiumDriver);
    appiumFluentWait.withTimeout(8, TimeUnit.SECONDS)
            .pollingEvery(350, TimeUnit.MILLISECONDS)
            .ignoring(NoSuchElementException.class);
}

`

【问题讨论】:

  • 它将从 apk 文件中读取自身。您必须传递不同的 apk 文件才能为多个应用创建会话
  • Ok Iwil 从@BeforeScenario 开始在上面再次发布它

标签: java junit automated-tests appium-android getgauge


【解决方案1】:

您可以从 VM aguements 传递应用程序名称,并在此基础上设置驱动程序实例。请看下面的代码:

@BeforeScenario public void beforeScenario(String appName) throws MalformedURLException {

    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
    switch (appName) {
  case "notepadApp":
    desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,notapadAppPackageName);
    desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,notepadAppActivityName);
    break;
  case "App-A":
    desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,appAAppPackageName);
    desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,appApadAppActivityName);
    break;
    case "App-B":
    desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,appBAppPackageName);
    desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,appBApadAppActivityName);
    break;
  default:
    System.out.println("No matching app is found.");
}

    // Common desired capabilities set
    desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
    desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "device");
    desiredCapabilities.setCapability(MobileCapabilityType.UDID, "L2N4C19924005752");
    desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
    desiredCapabilities.setCapability(MobileCapabilityType.NO_RESET, true);
    desiredCapabilities.setCapability(MobileCapabilityType.FULL_RESET, false);
    desiredCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300);
    desiredCapabilities.setCapability("unicodeKeyboard", false);
    desiredCapabilities.setCapability("appWaitDuration", 30);
    desiredCapabilities.setCapability("resetKeyboard", false);
    URL url = new URL("http://localhost:4723/wd/hub");
    appiumDriver = new AndroidDriver(url, desiredCapabilities);

    selector = SelectorFactory
            .createElementHelper(localAndroid ? SelectorType.ANDROID : SelectorType.IOS);
    appiumDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    appiumFluentWait = new FluentWait(appiumDriver);
    appiumFluentWait.withTimeout(8, TimeUnit.SECONDS)
            .pollingEvery(350, TimeUnit.MILLISECONDS)
            .ignoring(NoSuchElementException.class);
}

【讨论】:

  • 在我的项目中,我不使用 apk 文件。只需根据不同的应用开发测试用例。前任。我的项目对每个应用程序都有不同的规格。所以我想做一个参数,当开始测试时,驱动程序知道哪些应用程序运行测试。
  • 所以你不需要在运行测试用例之前在设备上安装应用程序?拥有所有应用的数据(appPackage 和 appActivity)。
  • 是的,我有 appPAckage 和 appActivityname。只需要设置 beforetest 类来选择哪个应用程序开始测试
  • 您可以在 VM Argent 的帮助下决定。对多个应用使用 switch case 并传递 appName 来决定要启动哪个应用
  • 我会的。请以您创建驱动程序实例的方式分享您的代码。我将修改相同的代码。
猜你喜欢
  • 2020-02-19
  • 2021-11-17
  • 1970-01-01
  • 2016-08-23
  • 2018-02-12
  • 2015-09-27
  • 2016-04-23
  • 2016-12-27
  • 1970-01-01
相关资源
最近更新 更多