如何使用appium在两个本机应用程序之间切换

时间:2019-03-18 07:30:19

标签: appium appium-android

我想在两个应用程序之间切换而不丢失应用程序的先前状态。我们如何使用appium实现这一目标。

场景: 1.启动任何需要OTP登录的应用程序(例如:filpkart) 2.启动SMS应用程序并阅读OTP 3.关闭SMS应用程序,然后切换回第一个应用程序,然后输入OTP,我们将从SMS应用程序中读取它。

有人可以帮我吗?

关于, 希瓦·奥莱蒂

3 个答案:

答案 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应用程序兼容。