Selenium IDE中API请求响应返回null,如何正确获取响应信息?
解决Selenium IDE中XMLHttpRequest响应获取为null的问题
问题根源
你的代码直接在xmlhttp.send()之后获取xmlhttp.status,但XMLHttpRequest默认是异步执行的——send方法调用后请求会在后台发送,此时请求还没完成,自然拿不到有效响应,所以status会是null或0。另外你的Payload里还有一处语法错误:"communicationType": "Newsletter": 1是无效的键值对,得修正为正确格式(比如"communicationType": "Newsletter", "status": 1),否则请求可能发送失败。
正确获取响应的方法
方法1:异步监听请求状态(推荐)
利用onreadystatechange事件监听请求的状态变化,当请求完成(readyState=4)时再获取响应信息:
var xmlhttp = new XMLHttpRequest(); var theUrl = "你的接口地址"; // 补充完整接口URL xmlhttp.open("POST", theUrl); xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xmlhttp.setRequestHeader("client_id", "你的client_id"); // 补充实际值 xmlhttp.setRequestHeader("client_secret", "你的client_secret"); // 补充实际值 // 监听请求状态变化 xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState === 4) { // 请求已完成 if (xmlhttp.status === 200) { // 响应成功 console.log("响应状态码:" + xmlhttp.status); console.log("响应内容:" + xmlhttp.responseText); // 若要在Selenium IDE中保存响应,可赋值给全局变量供后续调用 window.apiResponse = xmlhttp.responseText; } else { console.log("请求失败,状态码:" + xmlhttp.status); } } }; // 修正Payload语法错误后发送请求 xmlhttp.send(JSON.stringify({ "header": { "correlationId": "", "eventName": "createCustomer" }, "payload": [{ "typeOfCustomer": 2, "samplingProgramCode": "samplingProgramCode", "firstname": "CPRichard82", "prefix": "Herr", "lastname": "CPKearney82", "birthdate": "1978-07-23", "healthInsuranceNumber": "", "dataPrivacy": 1, "termsAndConditions": 1, "videoTraining": 1, "signature": 1, "gender": 0, "email": "", "mobile": "+491510000000", "tel": "1554445454", "measurement": "mmol/l", "permissions": [{ "communicationType": "Newsletter", "status": 1 // 修正语法错误,补充正确键名 }] }] }));
方法2:同步请求(不推荐)
如果必须同步执行(会阻塞浏览器直到请求完成),可以在open方法中添加第三个参数false:
var xmlhttp = new XMLHttpRequest(); var theUrl = "你的接口地址"; // 第三个参数设为false,开启同步模式 xmlhttp.open("POST", theUrl, false); xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xmlhttp.setRequestHeader("client_id", "你的client_id"); xmlhttp.setRequestHeader("client_secret", "你的client_secret"); // 修正Payload语法错误 xmlhttp.send(JSON.stringify({ // ... 同上面的Payload内容 })); // 此时请求已完成,可直接获取状态和响应 console.log("状态码:" + xmlhttp.status); console.log("响应内容:" + xmlhttp.responseText);
Selenium IDE使用提示
- 将上述代码放入Selenium IDE的
Execute Script命令中执行。 - 若需保存响应供后续步骤使用,可在异步回调中把响应赋值给全局变量,再用
Store JavaScript命令获取该变量。
内容的提问来源于stack exchange,提问作者RichardRobot
相关产品推荐
相关产品推荐

