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
3 Réponses :
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);
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")
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
É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.