Selendroid在Appium中的使用(兼容Android api 17 以下)

缘由

由于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,如:

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值