我正在尝试记录所有浏览器请求和响应。这可以通过browsermob-proxy api来完成。
为此,我必须更改所需的功能并更改浏览器的httpProxy。
在全球或文件级别的之前,我试图改变这一点。虽然它反映在浏览器对象中,但实际的浏览器不是通过这些设置启动的。
简单示例:
globalhook文件
module.exports = {
before : function (done) {
},
beforeEach: function(browser, done){
browser.options.desiredCapabilities = {
"browserName": "chrome",
"proxy": {
"proxyType": "manual",
"httpProxy": "127.0.0.1:" + someport,
"sslProxy": "127.0.0.1:" + someport
},
"javascriptEnabled": true,
"acceptSslCerts": true,
}
done()
},
afterEach: function(browser, done){
//some code
}
after : function (done) {
//some code
},
}
如果我在挂机前改变了所需的功能,Chrome浏览器就会进行这些更改。问题在于beforeEach [全局,文件级别]。
进一步调试,我发现setCapabilities函数在beforeHach Hook之前运行。
如果我做错了什么,有人可以看看或建议。
答案 0 :(得分:0)
感谢您在此处提出问题。
问题是desiredCapabilities
已应用于浏览器会话。
beforeEach
和afterEach
在同一个浏览器会话上运行,因此除非会话重新启动,否则desiredCapabilities
中的任何更改都不会应用。
如果您需要动态更改desiredCapabilities
,则必须以不同方式构建测试,例如将测试拆分为单独的测试类
答案 1 :(得分:0)
首先,您可能希望使用before()
挂钩代替beforeEach()
,因为beforeEach()
将在每个测试用例之前运行,而您又无法修改开始浏览器会话。 before()
将在启动浏览器会话之前运行。
要解决您的问题,您需要在测试运行模块上定义desiredCapabilities
属性,如果需要设置一些动态值,请使用before()
hook来修改该对象:
module.exports = {
desiredCapabilities: {
"browserName": "chrome",
"proxy": {
"proxyType": "manual",
"httpProxy": "127.0.0.1",
"sslProxy": "127.0.0.1"
},
"javascriptEnabled": true,
"acceptSslCerts": true,
},
before: function(client, done) {
this.desiredCapabilities.proxy.sslProxy = '127.0.0.1' + someport;
done();
}
}
我已经搜索过有关此功能的官方文档,但无法找到任何内容,不过我们在测试中使用过此功能并且运行良好。
<强>更新强>
由于您只需要在proxy
对象上更改desiredCapabilities
,因此有一点黑客攻击:
// global hooks file:
module.exports = {
beforeEach: function(client, done) {
client.options.desiredCapabilities.proxy = {
"proxyType": "manual",
"httpProxy": "127.0.0.1:" + someport,
"sslProxy": "127.0.0.1:" + someport
};
done(client);
}
};
更改desiredCapabilities
对象无法正常工作,因为对原始对象的引用已经存储在Nightwatch的引擎盖下。但是没有什么可以阻止你覆盖该对象的proxy
属性。
在Nightwatch中查看来源和测试后,我相信这是您案例的唯一解决方案。