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