Https 站点未在cypress窗口中进行保护

Https 站点未在cypress窗口中进行保护,https,cypress,sockjs,Https,Cypress,Sockjs,我们的网站是安全的,chrome也显示“安全”锁图标。但当我运行cypress自动化测试时,cypress窗口显示“不安全”。所以我在控制台上看到下面的错误,页面并没有加载 SecurityError:可能无法从通过HTTPS加载的页面启动不安全的SockJS连接 如何解决这个问题 注意:我们有sockJs客户端。所以sockjs客户端抛出这个错误 sockjs-client/lib/main.js:79 if (loc.protocol === 'https:' && !se

我们的网站是安全的,chrome也显示“安全”锁图标。但当我运行cypress自动化测试时,cypress窗口显示“不安全”。所以我在控制台上看到下面的错误,页面并没有加载

SecurityError:可能无法从通过HTTPS加载的页面启动不安全的SockJS连接

如何解决这个问题

注意:我们有sockJs客户端。所以sockjs客户端抛出这个错误

sockjs-client/lib/main.js:79

if (loc.protocol === 'https:' && !secure) { 
   throw new Error('SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS'); 
 }  

如果您想绕过此错误(与不首先在本地主机上抛出错误相反),可以这样将其静音

我已经考虑了你在评论中所写的内容,虽然我不知道原因,但让我们拿出大炮来。如果这不起作用,那我就不知道了

这假设您正在使用
cy.visit
加载页面。此外,这不适用于非页面测试(例如,当您根本不加载页面时)

//cypress/support/index.js
overwrite('visit',(origFn,url,opts={})=>{
//规范化参数
// -------------------------------------------------------------------------
如果(url的类型=='string'){
opts.url=url;
}否则{
opts=url;
}
//加载前覆盖
// -------------------------------------------------------------------------
const _onBeforeLoad=opts.onBeforeLoad;
opts.onBeforeLoad=函数(win){
//monkey patch`window.onerror` Cypress用于出错的回调
//当cypress开始使用'addEventListener'时,我们
//有麻烦了。
//注意:此时,Cypress应该已经添加了回调
//如果不是这样,我们必须在“window.onerror”上添加一个setter
//确保我们包装回调,在那里。
const_onerror=win.onerror;
win.onerror=函数(err){
如果(
typeof err==='string'&&
err.includes('SecurityError:不安全的SockJS')
)返回;
_错误呼叫(赢,…参数);
}
//添加常规侦听器以防止登录到devTools控制台
win.addEventListener('error',ev=>{
如果(
ev&&typeof ev.message==='string'&&
ev.message.includes('SecurityError:不安全的SockJS')
) {
ev.preventDefault();
ev.立即停止传播();
}
});
//调用用户提供的“onBeforeLoad”回调(如果提供)
如果(\u onBeforeLoad)\u onBeforeLoad(win);
}
// -------------------------------------------------------------------------
返回origFn(opts);
});

另请参见

谢谢@dewlle。我已经在index.js中添加了这些行,但问题仍然存在。我在QueryLook中添加了错误图像,就像在测试之外抛出错误一样。你能发布你失败的规范文件吗(你可以删除不相关的代码)?WTBS,我已经更新了我的答案,看看它是否有效,现在。