缘由
由于Appium只支持Android Api >=17,因此如果需要对Android api 17 以下的机子进行测试的话,就必须采用另外的自动化测试引擎。而Appium对Selendroid引擎(支持17一下)进行了很好的兼容,所以在采用了Appium的情况下,要处理Api兼容,Selendroid便成了我们的首选。
Selendroid在Appium中的使用
代码
从官方文档可以知道,我们可以很方便的使用Selendriod,代码如下:
//配置参数
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Android Emulator");
capabilities.setCapability("app", appPath);
//其它配置...
//以下是Selendroid相关代码
if(Integer.parseInt(device.getApiLevel())<17){
//当判断当前设备的Api小于17时,使用Selendroid
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.SELENDROID);
}
可能存在的问题
以上方法看似简单,但是其实还有很多问题(坑),需要自行处理,目前仅总结我遇到的一些情况
一、无法正常启动session
由于Selendroid的服务默认是使用8080端口,因此,如果8080端口被占用的话,将会导致session无法正常启动,这点可以通过Appium日志查看失败原因。
目前还未找到在Appium的相关代码配置中修改这个默认的端口号,因此采用的方法是将占用的8080释放出来供selendroid使用:
- 可以通过cmd窗口,利用指令netstat -ano | findstr “8080”查看8080端口是否被占用,如:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2412
TCP [::]:8080 [::]:0 LISTENING 2412
从上面可以看出,8080正在被PID为2412的程序使用着。
- 释放8080端口
根据上面的指令,我们确定了是PID为2412的程序占用了8080端口,那么可以使用(Windows)任务管理器找到对应的程序进行关闭:
原本的driver方式无法早到元素
由于Appium的页面检测用的是UIAutomator而Selendriod使用的是Selendriod inspector,两者是不同的。因此,如果使用Selendriod就需要用Selendriod inspector来定位元素,并生成相应的脚本。
二、Selendriod inspector的使用
1 下载相关文件
先到官网下载selendroid-standalone-x-with-dependencies.jar以及官方提供的测试App:selendroid-test-app-x.apk(x指最新版本)
2 启动服务(server)
利用cmd执行指令:
java -jar selendroid-standalone-x-with-dependencies.jar -aut selendroid-test-app-x.apk
//x与你当前下载的版本一致,如selendroid-test-app-0.17.0.apk
3 检查服务是否正常开启
开启浏览器,输入http://localhost:4444/wd/hub/status ,如果正常你将看到类似下面的数据:
{
"value": {
"os": {
"name": "Windows 7",
"arch": "amd64",
"version": "6.1"
},
"build": {
"browserName": "selendroid",
"version": "0.17.0"
},
"supportedDevices": [
{
"emulator": false,
"screenSize": "(720, 1280)",
"serial": "3d03d887",
"platformVersion": "23",
"model": "vivo Y55A",
"apiTargetType": "google"
}
],
"supportedApps": [
{
"mainActivity": "io.selendroid.testapp.HomeScreenActivity",
//这个值我们后面可能会用到
"appId": "io.selendroid.testapp:0.17.0",
"basePackage": "io.selendroid.testapp"
},
{
"mainActivity": "io.selendroid.androiddriver.WebViewActivity",
"appId": "io.selendroid.androiddriver:0.17.0",
"basePackage": "io.selendroid.androiddriver"
}
]
},
"status": 0
}
这里要留意一个值:supportedApps中的appId,我们后面会用到
4 新建一个测试工程(TestDemo)
可以使用Eclipse或者IntelliJ创建一个Java测试工程,步骤:
- 新建Java工程,并在项目中添加以上所下载的jar包(selendroid-standalone-x-with-dependencies.jar)
- 编写程序使用Selendriod:
public class Main {
public static void main(String[] args) throws Exception {
//注意,这里的io.selendroid.testapp:0.17.0就是上面提到的appId,
//当你测试自己的app时,这个值要相应改变
SelendroidCapabilities capa = new SelendroidCapabilities("io.selendroid.testapp:0.17.0");
WebDriver driver = new RemoteWebDriver(capa);
//driver.getPageSource();
WebElement inputField = driver.findElement(By.id("my_text_field"));
driver.quit();
}
}
5 运行(TestDemo)项目并打开Selendriod inspector
运行项目前需要注意两点:
- 必须在项目中添加断点,如:
- 必须以debug模式运行项目
项目正常启动后,我们可以通过浏览器,输入:http://localhost:4444/inspector ,便可打开Selendriod inspector,如: