Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Java Client for Appium WebDriverAgent, the api doc:https://documenter.getpostman.com/view/1837823/TVmMhJNB

NotificationsYou must be signed in to change notification settings

tal-tech/wda-java-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

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

maven仓库地址

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();}

API列表

假设新建了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();

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp