前段時間在用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的方式