转载至: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的方式