Appium移动端UI自动化中,如果需要两个APP交互操作的实践经验

来源:互联网 发布:大力水手 知乎 编辑:程序博客网 时间:2024/05/25 18:12

转载至:http://www.cnblogs.com/appstest/p/5088877.html

前段时间在用Appium做UI自动化,碰到一个原来没有碰到的问题,原来做的项目都是单独的APP操作。

在目前的项目中,有两个APP,两个APP需要交互操作,一个发单,一个接单,这边发单以后,另外个APP需要接单。

想了两种方法:

一、Two App in one device 两个app在同一个设备上运行

  1.启动device,安装一个app

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@BeforeTest
  public void beforeTest() throws Exception{
      logger.info("***********************************************************************");
      logger.info("Test begin:");
      logger.info("发单接单,整车,测试");
       
      //获取app路径
      File classpathRoot = new File(System.getProperty("user.dir"));
      File appDir = new File(classpathRoot, "apps");
      File app_carrier = new File(appDir, "carrier.apk");
      File app_shipper = new File(appDir, "shipper.apk");
      logger.info("获取app path:"+app_carrier.getAbsolutePath());
      //set up Appium
      DesiredCapabilities capabilities1 = new DesiredCapabilities();
      capabilities1.setCapability("device","Android");
      capabilities1.setCapability(MobileCapabilityType.DEVICE_NAME, "HC35NW906179");
      capabilities1.setCapability(MobileCapabilityType.UDID, "HC35NW906179");
      capabilities1.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4.4");
      capabilities1.setCapability(MobileCapabilityType.APP, app_carrier.getAbsolutePath());
      capabilities1.setCapability(MobileCapabilityType.APP_PACKAGE, "com.kuaihuoyun.driver");
      capabilities1.setCapability(MobileCapabilityType.APP_ACTIVITY, ".KDLaunch");
      //for input Chinese
      capabilities1.setCapability("unicodeKeyboard""True"); 
      capabilities1.setCapability("resetKeyboard""True");
      try {
          driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities1);
        logger.info("carrier app启动成功");
    catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

  2.安装另外一个app

1
2
3
4
5
6
7
8
9
//安装货主端
driver.installApp(app_shipper.getAbsolutePath());
logger.info(app_shipper.getAbsolutePath());
if(driver.isAppInstalled("com.kuaihuoyun.freight")==true){
    logger.info("货主端安装成功");
}
else{
    logger.info("货主端安装失败");        
}

  3.操作时通过startActivity切换不同app

1
2
//切换到货主端
driver.startActivity("com.kuaihuoyun.freight"".KDLaunch");

二、two devices two apps 两个设备,每个设备单独一个app

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  //set up Appium
    //司机端
  DesiredCapabilities capabilities1 = new DesiredCapabilities();
  capabilities1.setCapability("device","Android");
  capabilities1.setCapability(MobileCapabilityType.DEVICE_NAME, "7N2MYN14BK036952");
  capabilities1.setCapability(MobileCapabilityType.UDID, "7N2MYN14BK036952");
  capabilities1.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4.3");
  capabilities1.setCapability(MobileCapabilityType.APP, app_carrier.getAbsolutePath());
  capabilities1.setCapability(MobileCapabilityType.APP_PACKAGE, "com.kuaihuoyun.driver");
  capabilities1.setCapability(MobileCapabilityType.APP_ACTIVITY, ".KDLaunch");
  //for input Chinese
  capabilities1.setCapability("unicodeKeyboard""True"); 
  capabilities1.setCapability("resetKeyboard""True");
   
  try {
      driver__carrier = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities1);
    logger.info("carrier app启动成功");
catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
   
    //货主端
  DesiredCapabilities capabilities2 = new DesiredCapabilities();
  capabilities2.setCapability("device","Android");
  capabilities2.setCapability(MobileCapabilityType.DEVICE_NAME, "HC35NW906179");
  capabilities2.setCapability(MobileCapabilityType.UDID, "HC35NW906179");
  capabilities2.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4.4");
  capabilities2.setCapability(MobileCapabilityType.APP, app_shipper.getAbsolutePath());
  capabilities2.setCapability(MobileCapabilityType.APP_PACKAGE, "com.kuaihuoyun.freight");
  capabilities2.setCapability(MobileCapabilityType.APP_ACTIVITY, ".KDLaunch");
  //for input Chinese
  capabilities2.setCapability("unicodeKeyboard""True"); 
  capabilities2.setCapability("resetKeyboard""True");
 
  try {
      driver__shipper = new AndroidDriver<>(new URL("http://127.0.0.1:4725/wd/hub"), capabilities2);
    logger.info("shipper app启动成功");
catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

  启动两个appium代理,设置不同port,在不同设备中安装不同app

 

总结:Two App in one device的方式运行起来不是很稳定,目前采用two devices two apps的方式

原创粉丝点击