1
votes

Comment basculer entre deux applications natives à l'aide d'Appium

Je souhaite basculer entre deux applications sans perdre l'état précédent de l'application. Comment pouvons-nous y parvenir en utilisant appium?

Scénario: 1. Lancez n'importe quelle application qui nécessite OTP pour se connecter (Ex: filpkart) 2. Lancez l'application SMS et lisez l'OTP 3. Fermez l'application SMS et revenez à la première application et entrez OTP que nous lisons depuis l'application SMS.

Quelqu'un pourrait-il m'aider à ce sujet?

Cordialement, Shiva Oleti


0 commentaires

3 Réponses :


0
votes

Pour cela, vous devez définir deux AppiumServer avec un port différent, deux AppiumDriver (un pour l'application sms et un autre pour une autre application).

Démarrez le pilote appium avec 2 ports différents, par exemple: 4723 et 4724. Définissez 2 pilotes:

driver1.activateApp(appPackage of app1);

Définissez DesiredCapabilities strong> pour les deux applications et initialisez les deux pilotes.

Commencez par ouvrir et connectez-vous.

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:4724/wd/hub"), caps);
}

Ensuite, lancez sms et effectuez l'action

 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:4723/wd/hub"), caps);
}

Maintenant, pour passer de app1 à app2, vous pouvez utiliser la méthode d'appel startApp2. Maintenant, si vous souhaitez revenir à nouveau pour basculer vers app1. Utilisez:

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

maintenant si vous souhaitez à nouveau basculer vers app2, utilisez: driver2.activateApp (appPackage de la 2ème application);


3 commentaires

Mais le problème ici est que chaque fois que vous passez à app1, il redémarre à partir de zéro au lieu de l'état précédent. Toute réflexion à ce sujet.


J'ai mis à jour ma réponse. Vous pouvez vérifier si cela fonctionne pour vous


vous pouvez utiliser driver.activateApp ("package d'application pour changer d'application")



0
votes

Eh bien, si vous voulez envoyer une application en arrière-plan, utilisez simplement la fonction driver.CloseApp () et relancez-la par driver.OpenApp()

Vous pouvez utilisez également la méthode keycode . Voici les codes

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

, puis effectuez l'activité getOTP à partir du message, puis revenez à l'application principale


0 commentaires

0
votes

Étape 1: - Lancez l'application en passant normalement toutes les fonctionnalités souhaitées (par exemple, l'application Flipkart)

Étape 2): - effectuez une action pour obtenir OTP

Étape 3): - Une fois OTP reçu, essayez de passer e AppPacakge et AppActivity de l'application de messagerie où vous obtenez otp à la méthode ci-dessous (vous obtenez l'application pacakage et l'activité par la commande adb shell)

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

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

     }

      return flag;
     }

Étape 4). Une fois le message (OTP) lu, fermez l'application de messagerie par la méthode ci-dessous.

    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;

    }

Étape 5). Une fois que celui-ci est fermé, recherchez le Xpath du champ où vous devez copier le fichier otp. Collez-le et continuez.

P.S: - Cela fonctionne bien avec l'application Android.


0 commentaires