- Notifications
You must be signed in to change notification settings - Fork3
Java Client for Appium WebDriverAgent, the api doc:https://documenter.getpostman.com/view/1837823/TVmMhJNB
tal-tech/wda-java-client
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
WebDriverAgent(wda)是iOS端一个最著名的UI自动化测试框架,Appium目前使用的xctest-driver也是基于WebDriverAgent来做二次封装和调用的,经常逛testerhome社区发现,其实很多公司也并没有直接用appium来做iOS自动化,而是直接调用WebDriverAgent来实现自己的iOS自动化框架。
最近我也在做iOS的自动化框架,也是基于它来改造的,wda的代码写非常工整,方便阅读,是学习iOS自动化技术的典范,它内部的实现原理,其实比较简单,就是基于xctest,实现一个内部的http服务器,通过http api接口的形式提供外界调用,我用postman整理了一共71个接口,制作了一个文档:WebDriverAgent Http Api 文档,并基于这个api接口,开发了对应的java-client开源调用库,方便大家试用,也欢迎大家试用这个api接口完成Python的调用库,这将非常有价值!
关于对WebDriverAgent的理解和使用,参见我这篇文章:理解和使用WebDriverAgent
todo:maven 仓库
WDAClientclient =newWDAClient("127.0.0.1",8100);// 检查wda是否健康client.health();client.getSessionApi().healthCheck();// 创建SessionBaseResponse<CreateSession>res =client.getSessionApi().createSession();if (res.isSuccess) {Stringsid =res.getValue().getSessionId();// 启动应用BaseResponser =this.client.getSessionApi().launchApp(sid,"com.apple.Maps");assertr.isSuccess();}
假设新建了client对象:
WDAClientclient =newWDAClient("127.0.0.1",8100);
全局Api
// 获取控件树Stringsource =client.getPageSource();// 检查client是否健康booleanhealth =client.health();// 关闭wda clientbooleanbl =client.shutdown();
Session会话Api
// 创建SessionBaseResponse<String>res =client.getSessionApi().createSession();// 启动应用BaseResponseres =client.getSessionApi().launchApp("session id","bundle id");// 获取应用状态BaseResponse<Integer>res =client.getSessionApi().getAppState();// 激活应用(如果引用未启动,则重新启动)BaseResponseres =client.getSessionApi().activateApp("session id","bundle id");// 健康检查(wda会按一次home物理键,来检测手机是否卡主,wda是否正常工作)BaseResponseres =client.getSessionApi().healthCheck();
Screenshot截图Api
// 截图(成功的话,返回Base64图片数据)BaseResponse<String>res =client.getScreenshotApi().screenshot();
Orientation旋转Api
// 获取当前手机屏幕方向// 横向 - LANDSCAPE// 竖向 - PORTRAITBaseResponse<String>res =client.getOrientationApi().getOrientation("session id");
Alert对话框Api
// 获取当前alet对话框的文本,如果失败那就是界面没有alert提示框BaseResponse<String>res =client.getAlertApi().getAlertText();// 获取alert对话框的操作按钮的文本列表BaseResponse<List<String>>res =client.getAlertApi().getAlertButtons("session id");// 隐藏alert对话框BaseResponseres =client.getAlertApi().dismiss("session id");// 点击对话框的某个按钮BaseResponseres =client.getAlertApi().accept("session id","alert button name");
FindElement元素查找Api
// 查找符合某个条件的所有元素QueryInfo query = new QueryInfo();queryInfo.setUsing(QueryUsing.CLASS_NAME);queryInfo.setValue("XCUIElementTypeStaticText");BaseResponse<List<Element>> res = client.getFindElementApi().elements("session id", query);// 查找某个元素下的符合条件的所有子元素BaseResponse<List<Element>> res = client.getFindElementApi().elements("session id", "target element uuid", query);Element元素Api
// 获取手机窗口大小BaseResponse<WindowSize>res =client.getElementApi().getWindowSize("session id");// 检查某个元素是否禁用了BaseResponse<Boolean>res =client.getElementApi().enabled("session id","element uuid");// 获取某个元素的大小BaseResponse<WDARect>res =client.getElementApi().rect("session id","element uuid");// 获取某个元素的文本BaseResponse<String>res =client.getElementApi().text("session id","element uuid");// 检查某个元素是否展现了BaseResponse<Boolean>res =client.getElementApi().displayed("session id","element uuid");// 检查某个元素是否被选择了BaseResponse<Boolean>res =client.getElementApi().selected("session id","element uuid");// 获取某个元素的名称BaseResponse<String>res =client.getElementApi().name("session id","element uuid");// 对某个控件截图BaseResponse<String>res =client.getElementApi().screenshot("session id","element uuid");// 控件输入值BaseResponseres =client.getElementApi().value("session id","element uuid","value");// 点击某个控件BaseResponseres =client.getElementApi().click("session id","element uuid");// 清空输入框BaseResponseres =client.getElementApi().clear("session id","element uuid");// 滑动某个控件// 将一个控件往某个方向滑动// 包含两个参数:// direction表示滚动方向,可选值有:up、down、left、right// velocity表示滚动速度,只建议从50-100,值越大速度越快Stringdirection ="down";intvelocity =50;BaseResponseres =client.getElementApi().swip("session id","element uuid",direction,velocity);// 长按一个控件// 可以设置时长,时间单位为秒intduration =3;BaseResponseres =client.getElementApi().touchAndHold("session id","element uuid",duration);// 坐标长按// 基于屏幕指定位置长按// x坐标x值100double// y坐标y值200double// duration长按时间,单位秒0.5doubleBaseResponseres =client.getElementApi().touchAndHoldInCoordinate("session id","element uuid",x,y,duration);// 控件拖动FromToParamparam =newFromToParam();param.setFromX(100);param.setFromY(100);param.setToX(500);param.setToY(500);param.setDuration(3);BaseResponseres =client.getElementApi().dragFromToForDuration("session id","element uuid",param);// 屏幕拖动(基于全屏幕的坐标拖动)BaseResponseres =client.getElementApi().dragFromToForDurationInCoordinate("session id",param);// 拨动滚轮控件// 找到一个滚动,向上或向下滚动,滚动幅度取值从0.1到0.5,0.1表示一格,最大5格// 被选定的控件的类型必须为:XCUIElementTypePickerWheel,否则报错。// {// "order": "next", // 取值为next或者previous,不区分大小写// "offset": 0.1 // 滚动幅度取值从0.1到0.5,0.1表示一格,最大5格// }BaseResponseres =client.getElementApi().pickWheel("session id","uuid","next or pre",1);// 输入文本// 对有输入焦点的控件输入字符串// 参数:// 字段名含义示例// value要输入的字符串数组["hello world", "dddd"]// frequency输入速度,整形,数字越大速度越快10// 备注:// 如果当前界面没有输入焦点的控件,这个操作会等待一段时间直到超时或者有焦点的控件出现intfrequency =10;List<String>values =newArrayList<>();values.add("hello world");values.add("test");BaseResponseres =client.getElementApi().keys("session id",frequency,values);// 或者BaseResponseres =client.getElementApi().keys("session id",frequency, ...keys);// 长按控件// 支持设定压力和时延,以及控件内的某个位置// pressure压力值0.5// duration按压的时间,单位秒3// x该控件内的某个点的x值// y该控件内的某个点的y值intx =100;inty =100;intduration =2;doublepressure =0.5;BaseResponseres =client.getElementApi().forceTouch("session id","element uuid",x,y,duration,pressure);// 坐标双击BaseResponseres =client.getElementApi().doubleTap("session id",x,y);
Custom自定义Api
// 重启当前应用BaseResponseres =client.getCustomApi().deactiveApp("session id");// 锁屏BaseResponseres =client.getCustomApi().lock();// 解锁BaseResponseres =client.getCustomApi().unlock();// 判断手机是否锁屏BaseResponse<Boolean>res =client.getCustomApi().locked();// 获取当前应用信息BaseResponse<ActiveAppInfo>res =client.getCustomApi().getActiveAppInfo();// 获取当前设备信息BaseResponse<WDADeviceInfo>res =client.getCustomApi().getDeviceInfo();// 手机回到屏幕主页BaseResponseres =client.getCustomApi().homeScreen();
About
Java Client for Appium WebDriverAgent, the api doc:https://documenter.getpostman.com/view/1837823/TVmMhJNB
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.