Java 在android Appium测试自动化中,如何在场景之前选择appPackage和appActivity
我想在@BeforeCasenario中选择启动应用程序(appPackage,appActivity),为一个测试项目中的多个应用程序开发测试场景。我知道使用启动活动,但由于安全权限被拒绝,我无法使用它。唯一的工作方法是在BeforeSecenario中使用功能。在开始测试之前,我想选择启动应用程序。我的代码: `@之前的情景 public void beforeCasenario()引发了错误的FormedUrlexception{Java 在android Appium测试自动化中,如何在场景之前选择appPackage和appActivity,java,junit,automated-tests,appium-android,getgauge,Java,Junit,Automated Tests,Appium Android,Getgauge,我想在@BeforeCasenario中选择启动应用程序(appPackage,appActivity),为一个测试项目中的多个应用程序开发测试场景。我知道使用启动活动,但由于安全权限被拒绝,我无法使用它。唯一的工作方法是在BeforeSecenario中使用功能。在开始测试之前,我想选择启动应用程序。我的代码: `@之前的情景 public void beforeCasenario()引发了错误的FormedUrlexception{ DesiredCapabilities desir
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);
}
`您可以从VM Aguents传递应用程序名称,并在此基础上设置驱动程序实例。请查看下面的代码:
@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文件中读取自身。你必须传递不同的apk文件为多个APOK创建会话,我将在上面再次发布它从@BeforeScenario开始在我的项目中我不使用apk文件。只需根据不同的应用开发测试用例。例如,我的项目对每个应用都有不同的规格。因此,我想在在测试之前,驱动程序知道要运行测试的应用程序。因此,在运行测试用例之前,您不需要在设备上安装应用程序?是否拥有所有应用程序的数据(appPackage和appActivity).Yeap,我有appPAckage和appActivityname。只需要设置beforetest类来选择哪个应用程序启动测试,您可以在VM Argunt的帮助下决定。使用多个应用程序的切换案例并传递appName来决定您要启动哪个应用程序。我将执行此操作。请以创建驱动程序实例的方式共享您有疑问的代码。我将修改相同的代码。