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的方式
阅读全文
0 0
- Appium移动端UI自动化中,如果需要两个APP交互操作的实践经验
- 基于testng+appium的APP UI自动化并行执行平台
- Appium移动手势的自动化
- 移动端UI自动化Appium测试——DesiredCapabilities参数配置及含义
- Appium UI自动化的那些梗
- 移动端自动化测试 python appium Android
- Appium(移动端自动化)-解锁屏幕
- Appium+Python移动端自动化案例一个
- 移动端自动化主力 之 Appium
- appium移动自动化测试
- Appium移动自动化框架
- Appium——处理混合APP中H5的操作
- Appium——处理混合APP中H5的操作
- Appium 自动化模拟点击等操作,移动端没有相应效果
- Appium logo 移动应用自动化测试 Appium
- 移动APP测试用例设计实践经验
- Appium的一点一滴:如果通过uiautomatorviewer获取app的element
- Appium移动自动化环境搭建
- R语言入门
- OSS 阿里云上传照片以及上传照片时的特殊设置
- C++对象的构造和析构
- 2. Add Two Numbers
- Tensorflow深度学习入门——优化训练MNIST数据和调用训练模型识别图片
- Appium移动端UI自动化中,如果需要两个APP交互操作的实践经验
- centos 安装 mysql 5.7.19
- 乐趣:knockout foreach绑定
- 你真的知道Java中boolean类型占用多少个字节吗?
- laravel学习笔记
- caffe用自己的数据集训练深度网络模型——windows平台适用
- node 版本管理
- Effective C++ — 类的设计与声明
- web中集中跨域方式