我想在两个应用程序之间切换而不丢失应用程序的先前状态。我们如何使用appium实现这一目标。
场景: 1.启动任何需要OTP登录的应用程序(例如:filpkart) 2.启动SMS应用程序并阅读OTP 3.关闭SMS应用程序,然后切换回第一个应用程序,然后输入OTP,我们将从SMS应用程序中读取它。
有人可以帮我吗?
关于, 希瓦·奥莱蒂
答案 0 :(得分:0)
为此,您需要定义两个 AppiumDriver ,一个用于短信应用程序,另一个用于另一个应用程序。
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);
}
每当要启动app1时,您都要调用startApp1方法;当要启动app2时,您可以调用startApp2方法。
现在,如果要在两个最近的应用程序之间切换,可以使用以下代码:
String cmd = "adb shell input keyevent 187";
Runtime.getRuntime.exec(cmd);
Runtime.getRuntime.exec(cmd);
这将在最近的应用之间切换。
187是KEYCODE_APP_SWITCH的关键事件。如果您两次使用 adb shell输入键盘事件187 ,它将切换到最新应用。
答案 1 :(得分:0)
好吧,如果您想在后台发送应用程序,则只需使用driver.CloseApp()
函数并通过driver.OpenApp()
重新启动它
您还可以使用按keycode
方法下面的代码
Home Menu Button - 82
Back Button - 4
Recent app - 187
然后从消息中执行getOTP活动,然后切换回主应用程序
答案 2 :(得分:0)
步骤1:-启动通常会通过所有所需功能的应用(例如Flipkart应用)
Step2):-执行操作以获取OTP
Step3):-一旦收到OTP,请尝试将消息传递应用程序的AppPacakge和AppActivity传递给以下方法(通过adb shell命令获取应用程序的功能和活动)
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)。读取message(OTP)后,请通过以下方法关闭消息应用程序。
public boolean closeApplication() throws Exception {
boolean flag = false;
if(driver!=null) {
driver.closeApp();
flag = true;
}
return flag;
}
Step5)。关闭后,找到需要在其中复制otp的字段的Xpath。粘贴并继续。
P.S:-此功能与Android应用程序兼容。