how to Make selectable appPackage and appActivity BeforeScenario in android Appium Test Automation

huangapple 未分类评论79阅读模式
标题翻译

how to Make selectable appPackage and appActivity BeforeScenario in android Appium Test Automation

问题

  1. @BeforeScenario
  2. public void beforeScenario() throws MalformedURLException {
  3. DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
  4. desiredCapabilities
  5. .setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
  6. desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "device");
  7. desiredCapabilities.setCapability(MobileCapabilityType.UDID, "L2N4C19924005752");
  8. if (localAndroid) {
  9. logger.info("Local Browser");
  10. desiredCapabilities
  11. .setCapability(AndroidMobileCapabilityType.APP_PACKAGE,
  12. notapadAppPackageName);
  13. desiredCapabilities
  14. .setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,
  15. notepadAppActivityName);
  16. }
  17. desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
  18. desiredCapabilities.setCapability(MobileCapabilityType.NO_RESET, true);
  19. desiredCapabilities.setCapability(MobileCapabilityType.FULL_RESET, false);
  20. desiredCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300);
  21. desiredCapabilities.setCapability("unicodeKeyboard", false);
  22. desiredCapabilities.setCapability("appWaitDuration", 30);
  23. desiredCapabilities.setCapability("resetKeyboard", false);
  24. URL url = new URL("http://localhost:4723/wd/hub");
  25. appiumDriver = new AndroidDriver(url, desiredCapabilities);
  26. selector = SelectorFactory
  27. .createElementHelper(localAndroid ? SelectorType.ANDROID : SelectorType.IOS);
  28. appiumDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  29. appiumFluentWait = new FluentWait(appiumDriver);
  30. appiumFluentWait.withTimeout(8, TimeUnit.SECONDS)
  31. .pollingEvery(350, TimeUnit.MILLISECONDS)
  32. .ignoring(NoSuchElementException.class);
  33. }
英文翻译

I want to choose starting app(appPackage,appActivity) in @BeforeScenario to develop a test scenarios for multiple apps in one test project. I know use the start activity but because of security permission denial, I can not use it. The only working method is using capabilities in beforeScenario. Before start the test I want to choose the starting app.My Code:

`@BeforeScenario
public void beforeScenario() throws MalformedURLException {

  1. DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
  2. desiredCapabilities
  3. .setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
  4. desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "device");
  5. desiredCapabilities.setCapability(MobileCapabilityType.UDID, "L2N4C19924005752");
  6. if (localAndroid) {
  7. logger.info("Local Browser");
  8. desiredCapabilities
  9. .setCapability(AndroidMobileCapabilityType.APP_PACKAGE,
  10. notapadAppPackageName);
  11. desiredCapabilities
  12. .setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,
  13. notepadAppActivityName);
  14. }
  15. desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
  16. desiredCapabilities.setCapability(MobileCapabilityType.NO_RESET, true);
  17. desiredCapabilities.setCapability(MobileCapabilityType.FULL_RESET, false);
  18. desiredCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300);
  19. desiredCapabilities.setCapability("unicodeKeyboard", false);
  20. desiredCapabilities.setCapability("appWaitDuration", 30);
  21. desiredCapabilities.setCapability("resetKeyboard", false);
  22. URL url = new URL("http://localhost:4723/wd/hub");
  23. appiumDriver = new AndroidDriver(url, desiredCapabilities);
  24. selector = SelectorFactory
  25. .createElementHelper(localAndroid ? SelectorType.ANDROID : SelectorType.IOS);
  26. appiumDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  27. appiumFluentWait = new FluentWait(appiumDriver);
  28. appiumFluentWait.withTimeout(8, TimeUnit.SECONDS)
  29. .pollingEvery(350, TimeUnit.MILLISECONDS)
  30. .ignoring(NoSuchElementException.class);
  31. }

`

答案1

得分: 0

你可以从虚拟机参数中传递应用程序名称,并根据此设置驱动程序实例。请查看下面的代码:

  1. @BeforeScenario public void beforeScenario(String appName) throws MalformedURLException {
  2. DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
  3. switch (appName) {
  4. case "notepadApp":
  5. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, notapadAppPackageName);
  6. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, notepadAppActivityName);
  7. break;
  8. case "App-A":
  9. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, appAAppPackageName);
  10. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, appApadAppActivityName);
  11. break;
  12. case "App-B":
  13. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, appBAppPackageName);
  14. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, appBApadAppActivityName);
  15. break;
  16. default:
  17. System.out.println("未找到匹配的应用程序。");
  18. }
  19. // 设置通用的所需能力
  20. desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
  21. desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "device");
  22. desiredCapabilities.setCapability(MobileCapabilityType.UDID, "L2N4C19924005752");
  23. desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
  24. desiredCapabilities.setCapability(MobileCapabilityType.NO_RESET, true);
  25. desiredCapabilities.setCapability(MobileCapabilityType.FULL_RESET, false);
  26. desiredCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300);
  27. desiredCapabilities.setCapability("unicodeKeyboard", false);
  28. desiredCapabilities.setCapability("appWaitDuration", 30);
  29. desiredCapabilities.setCapability("resetKeyboard", false);
  30. URL url = new URL("http://localhost:4723/wd/hub");
  31. appiumDriver = new AndroidDriver(url, desiredCapabilities);
  32. selector = SelectorFactory
  33. .createElementHelper(localAndroid ? SelectorType.ANDROID : SelectorType.IOS);
  34. appiumDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  35. appiumFluentWait = new FluentWait(appiumDriver);
  36. appiumFluentWait.withTimeout(8, TimeUnit.SECONDS)
  37. .pollingEvery(350, TimeUnit.MILLISECONDS)
  38. .ignoring(NoSuchElementException.class);
  39. }
英文翻译

You can pass app name from VM aguements and base on that you can set driver instance. Please have a look on code below:

  1. @BeforeScenario public void beforeScenario(String appName) throws MalformedURLException {
  2. DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
  3. switch (appName) {
  4. case "notepadApp":
  5. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,notapadAppPackageName);
  6. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,notepadAppActivityName);
  7. break;
  8. case "App-A":
  9. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,appAAppPackageName);
  10. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,appApadAppActivityName);
  11. break;
  12. case "App-B":
  13. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,appBAppPackageName);
  14. desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,appBApadAppActivityName);
  15. break;
  16. default:
  17. System.out.println("No matching app is found.");
  18. }
  19. // Common desired capabilities set
  20. desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
  21. desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "device");
  22. desiredCapabilities.setCapability(MobileCapabilityType.UDID, "L2N4C19924005752");
  23. desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
  24. desiredCapabilities.setCapability(MobileCapabilityType.NO_RESET, true);
  25. desiredCapabilities.setCapability(MobileCapabilityType.FULL_RESET, false);
  26. desiredCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300);
  27. desiredCapabilities.setCapability("unicodeKeyboard", false);
  28. desiredCapabilities.setCapability("appWaitDuration", 30);
  29. desiredCapabilities.setCapability("resetKeyboard", false);
  30. URL url = new URL("http://localhost:4723/wd/hub");
  31. appiumDriver = new AndroidDriver(url, desiredCapabilities);
  32. selector = SelectorFactory
  33. .createElementHelper(localAndroid ? SelectorType.ANDROID : SelectorType.IOS);
  34. appiumDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  35. appiumFluentWait = new FluentWait(appiumDriver);
  36. appiumFluentWait.withTimeout(8, TimeUnit.SECONDS)
  37. .pollingEvery(350, TimeUnit.MILLISECONDS)
  38. .ignoring(NoSuchElementException.class);
  39. }

huangapple
  • 本文由 发表于 2020年1月30日 19:36:44
  • 转载请务必保留本文链接:https://java.coder-hub.com/59985169.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定