Как переключаться между двумя нативными приложениями с помощью appium - PullRequest
1 голос
/ 18 марта 2019

Я хотел бы переключаться между двумя приложениями без потери предыдущего состояния приложения. Как мы можем достичь этого, используя appium.

Сценарий: 1. Запустите любое приложение, которое требует OTP для входа (например, filpkart) 2. Запустите приложение SMS и прочитайте OTP 3. Закройте приложение SMS и вернитесь к первому приложению и введите OTP, который мы читаем из приложения SMS.

Может ли кто-нибудь помочь мне в этом.

С уважением, Шива Олети

Ответы [ 3 ]

0 голосов
/ 18 марта 2019

Хорошо, если вы хотите отправить приложение в фоновом режиме, просто используйте функцию driver.CloseApp() и перезапустите его с помощью driver.OpenApp()

. Вы также можете использовать метод keycode. Ниже приведены коды

Home Menu Button - 82
Back Button - 4
Recent app - 187

и затем выполните действие getOTP из сообщения, затем переключитесь обратно в главное приложение

0 голосов
/ 20 марта 2019

Шаг 1: - Запустите приложение, обычно передавая все нужные возможности (например, приложение Flipkart)

Step2): - выполнить действие для получения OTP

Шаг 3): - После получения OTP попробуйте передать AppPacakge и AppActivity приложения обмена сообщениями, где вы получаете метод otp to ниже (вы получаете pacakage и активность приложения с помощью команды оболочки adb)

    public String startNewAndroidActivity(String AppPacakge, String AppActivity) throws 
    Exception{
    String actvty = null;
    Activity activity = new Activity(AppPacakge, AppActivity);
    activity.setAppWaitPackage(AppPacakge);
    activity.setAppWaitActivity(AppActivity);
    activity.setStopApp(false);
    try {
    ((AndroidDriver<MobileElement>) driver).startActivity(activity);
    Thread.sleep(1000);
    actvty = ((StartsActivity) driver).currentActivity();
    System.out.println(actvty);
    }
    catch (Exception e) {
        System.out.println("Error occured while starting new Activity 
    "+e.getMessage());
        e.printStackTrace();
    }
    return actvty;

    }

Step4). После прочтения сообщения (OTP) закройте приложение для отправки сообщений указанным ниже способом.

    public boolean closeApplication() throws Exception {
    boolean flag = false;

    if(driver!=null) {
        driver.closeApp();
        flag = true;

     }

      return flag;
     }

Шаг5). Как только это будет близко, найдите Xpath поля, где вам нужно скопировать OTP. Вставьте его и продолжайте.

P.S .: - Это хорошо работает с приложением Android.

0 голосов
/ 18 марта 2019

Для этого вам нужно определить два AppiumDriver , один для приложения sms и другой для другого приложения.

public static AppiumDriver<MobileElement> driver1;
public static AppiumDriver<MobileElement> smsDriver;

Определить DesiredCapabilities для приложения иинициализируйте оба драйвера.

Сначала откройте и выполните вход в систему.

 public void startApp1(){
  DesiredCapabilities cap1 = new DesiredCapabilities();
  cap1.setCapability(MobileCapabilityType.NO_RESET, true);
  cap1.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 600);
  cap1.setCapability(MobileCapabilityType.DEVICE_NAME, "android device");
  cap1.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
  cap1.setCapability("appPackage", "your app1 package name");
  cap1.setCapability("appActivity", "your app1 package name");
  cap1.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");

  driver1 = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4732/wd/hub"), caps);
}

После этого запустите смс и выполните действие

public void startApp2(){
DesiredCapabilities cap2 = new DesiredCapabilities();
cap2.setCapability(MobileCapabilityType.NO_RESET, true);
cap2.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 600);
cap2.setCapability(MobileCapabilityType.DEVICE_NAME, "android device");
cap2.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
cap2.setCapability("appPackage", "your app1 package name");
cap2.setCapability("appActivity", "your app1 package name");
cap2.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");

smsDriver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4732/wd/hub"), caps);
}

Всякий раз, когда вы хотите запустить приложение 1, вы вызываетеМетод startApp1, и когда вы хотите запустить app2, вы можете вызвать метод startApp2.

Теперь, если вы хотите переключаться между двумя недавними приложениями, вы можете использовать следующий код:

String cmd = "adb shell input keyevent 187";
Runtime.getRuntime.exec(cmd);
Runtime.getRuntime.exec(cmd);

Это будетпереключаться между недавними приложениями.

187 - событие ключа для KEYCODE_APP_SWITCH.Если вы дважды используете adb shell keyevent 187 дважды, он переключится на последнее приложение.

...