zoukankan      html  css  js  c++  java
  • Appium移动端UI自动化中,如果需要两个APP交互操作的实践经验

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

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

    想了两种方法:

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

      1.启动device,安装一个app

    @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

    	  //安装货主端
    	  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

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

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

    	  //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的方式

  • 相关阅读:
    gulp备忘
    好文收藏
    妙味H5交互篇备忘
    [CSS3备忘] transform animation 等
    css选择器总结
    flexbox备忘
    函数
    继承2
    在 Swift 中实现单例方法
    浅谈 Swift 中的 Optionals
  • 原文地址:https://www.cnblogs.com/appstest/p/5088877.html
Copyright © 2011-2022 走看看