如何使用javascript自动化测试更改javascript文件中的url
我正在尝试在自动化测试中修改javascript文件中的URL。这样我就可以指出一个服务的存根版本。我用于测试的框架是Serenity js(使用量角器) 在我的HTML DOM中,我有:如何使用javascript自动化测试更改javascript文件中的url,javascript,automation,stubbing,Javascript,Automation,Stubbing,我正在尝试在自动化测试中修改javascript文件中的URL。这样我就可以指出一个服务的存根版本。我用于测试的框架是Serenity js(使用量角器) 在我的HTML DOM中,我有: main.js var DataService = (function () { function DataService(http) { this.http = http; } DataService.prototype.getStudentDetails = fu
main.js
var DataService = (function () {
function DataService(http) {
this.http = http;
}
DataService.prototype.getStudentDetails = function (id) {
var parcel = this.http
.get('http://127.0.0.1/endpoint/' + id)
.map(function (res) {
return __WEBPACK_IMPORTED_MODULE_2__student_model__["a"].createStudent(res.json());
});
return student;
};
return DataService;
}());
我需要更改的部分是127.0.0.1/endpoint
我知道我使用
$.document.write
或$()冷更改HTML DOM。append
但不知道如何更改/覆盖DOM元素。这很简单,但有很多方法可以做到
sed
或awk
脚本预处理main.js
文件,并用其他内容替换所有出现的127…
字符串prototype
,并且该方法也不应该被调用,因此代码应该如下所示:DataService.prototype.getStudentDetails
,因为您可以完全控制它(除非它隐藏在闭包中)
另外,试图通过使javascript更难被篡改来保护您的系统,这只是通过模糊性实现的安全性——这是不真实的。任何攻击者都可以读取网络请求,然后在
curl
或Postman中重放它们。这很简单,但是有很多方法可以做到这一点
sed
或awk
脚本预处理main.js
文件,并用其他内容替换所有出现的127…
字符串prototype
,并且该方法也不应该被调用,因此代码应该如下所示:DataService.prototype.getStudentDetails
,因为您可以完全控制它(除非它隐藏在闭包中)
另外,试图通过使javascript更难被篡改来保护您的系统,这只是通过模糊性实现的安全性——这是不真实的。任何攻击者都可以读取网络请求,然后在
curl
或Postman中重播它们。您可以使用JS变量或“input hidden”字段。main.JS文件是现有的生产系统。我宁愿不更改源代码,因为它可能会打开其他用户的漏洞。我宁愿尝试改变“在飞行中”的现状。啊!你就是从那里来的!很抱歉,我完全误解了。另外,我能想到的唯一方法是调用var functionString=DataService.getStudentDetails(id).toString()
。然后可以更改字符串并执行新函数(functionString)
。请参见此处:您可以使用JS变量或“input hidden”字段。main.JS文件是一个现有的生产系统。我宁愿不更改源代码,因为它可能会打开其他用户的漏洞。我宁愿尝试改变“在飞行中”的现状。啊!你就是从那里来的!很抱歉,我完全误解了。另外,我能想到的唯一方法是调用var functionString=DataService.getStudentDetails(id).toString()
。然后可以更改字符串并执行新函数(functionString)
。看这里:@AndrewEvans很高兴听到。“你在三种方法中选择了哪一种?”安德烈·韦万斯很高兴听到。三种方法中你选择哪一种?
const newFnString = DataService.prototype.getStudentDetails.toString()
.replace("127.0.0.1", "something.com");
DataService.prototype.getStudentDetails = new Function(newFnString);