目的
通过对appium-desktop脚本录制功能进行二次开发,使录制的java脚本符合我司自动化框架要求。
实现步骤
1、增加元素名称的输入框
由于ATK(我司自动化测试框架)脚本中元素是以“app-page-element”的方式定位元素,所以需要用户输入page名称和element名称,并保存到数据库中。
1.1、实现方案
在现有的Tap、Send Keys、Clear操作上增加元素输入框操作,如图
1.2、代码修改
1.2.1、修改onClick方法
修改Inspector/SelectedElement.js 中tab、Tap、Send Keys、Clear的onClick方法,修改为通过在actions/Inspector.js中新增showSendElementNameModal()方法来控制弹出框, 该方法会把type设置为
SHOW_SEND_ELEMENT_NAME_MODAL, 在reducers/Inspector.js中中新增switch-case的一个分支,来设置sendElementNameModalVisible=true
export function showSendElementNameModal () {
return (dispatch) => {
dispatch({type: SHOW_SEND_ELEMENT_NAME_MODAL});
};
}
case SHOW_SEND_ELEMENT_NAME_MODAL:
return {
...state,
sendElementNameModalVisible: true
};
1.2.2、增加输入框
新增输入element的输入框,当sendElementNameModalVisible=true时该输入框显示,点击OK时,调用新增的handleSendElementName()方法,进行元素的获取和这是输入框隐藏
handleSendElementName () {
const {sendElementName, applyClientMethod, hideSendElementNameModal, selectedElementId: elementId} = this.props;
applyClientMethod({methodName: ‘click‘, elementId});
hideSendElementNameModal();---同showSendElementNameModal()方法
}
2、保存元素名称到数据库
表单提交元素名称后,需要把元素名称保存到数据库中,
2.1、实现方案
使用react已经引入JQuery的网络请求方案。通过POST方式把数据提交到数据库中
2.2、代码修改
Framework.js是各个语言录制脚本(java.js、python.js、ruby.js等)的父类。所以在Framework.js中进行数据库的统一添加
2.2.1、传参修改
Framework.js 的getCodeString()方法 增加sendElementName参数。通过RecordedActions传递过来。代码修改如下
2.2.2、post请求
其中page、element、expectedvalue需要用户填写,其它值可以通过代码获取。
postJSON() {
var obj = { "app":"guanjia", "element":‘aaaa‘, "expectedimg":"bbbb","expectedvalue": "cccc","os": "Android","page": "eeee","type": "id","value": "rwa"};--测试数据
const req = new XMLHttpRequest()
req.open(‘POST‘, ‘http://10.247.39.5:7070/wisper/api/v1/atk/appium/elementinfo‘)
req.setRequestHeader(‘Content-Type‘, ‘application/json;charset=UTF-8‘)
req.send(JSON.stringify(obj))
}
getCodeString (includeBoilerplate = false,sendElementName) {--新增sendElementName参数
this.postJSON();----增加对提交数据方法的调用
let str = ‘‘;
for (let {action, params} of this.actions) {
............
............
...........
}
3、修改录制脚本
每个语言都有一个js,我们主要修改java.js. 把return 结果改为ATK格式即可。