赛普拉斯抛出SecurityError

时间:2019-05-08 18:02:25

标签: google-chrome cypress

我目前正在与Chrome 74一起运行,并尝试使用赛普拉斯在我的应用中测试样式指南。当我加载赛普拉斯时,它将引发以下错误:

SecurityError: Blocked a frame with origin "http://localhost:3000" from accessing a cross-origin frame.

请告诉我是否有解决方案!

我尝试遵循以下步骤: https://github.com/cypress-io/cypress/issues/1951

但是对我来说,没有任何改变/起作用。 :(

我的代码如下所示:cypress/plugins/index.js

module.exports = (on, config) => {
    on('before:browser:launch', (browser = {}, args) => {
        // browser will look something like this
        // {
        //   name: 'chrome',
        //   displayName: 'Chrome',
        //   version: '63.0.3239.108',
        //   path: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
        //   majorVersion: '63'
        // }

        if (browser.name === 'chrome') {
            args.push('--disable-site-isolation-trials');

            return args
        }

        if (browser.name === 'electron') {
            args['fullscreen'] = true

            // whatever you return here becomes the new args
            return args
        }
    })
}

在我的cypress/support/index.js

这将在我运行每次测试之前加载网站,以免自己每次测试都必须编写cy.visit。

beforeEach(() =>{
    cy.visit('http://localhost:3000/style-guide')
})

5 个答案:

答案 0 :(得分:1)

我也遇到过这个问题。我的应用程序正在使用服务工作者。在访问页面时禁用 Service Worker 解决了该问题。

cy.visit('index.html', {
  onBeforeLoad (win) {
    delete win.navigator.__proto__.serviceWorker
  }
})

参考:https://glebbahmutov.com/blog/cypress-tips-and-tricks/#disable-serviceworker

答案 1 :(得分:0)

因此,至少对我来说,我的进一步问题是内部存在令牌,登录名等问题。但是!

我发布的代码说明插件文件夹中的索引如何正确绕过chrome问题。这就是您要解决的方法!

答案 2 :(得分:0)

昨天我遇到了同样的问题,问题中所引用的柏树issue #1951中的 @jsjoeio 答案实际上对我有帮助。

因此,基本上我唯一要做的就是修改import re li = ["00", "01", "01x", "XX", "YY"] #Append single quotes around the items we want to, and search matching items via regex li = ["'{}'".format(item) if item in re.findall('0*1*x*', item) else item for item in li ] #["'00'", "'01'", "'01x'", 'XX', 'YY'] #Create the string print(":".join('{}'.format(x) for x in li)) #'00':'01':'01x':XX:YY 并添加以下值:

cypress.json

值得一提的是,我是在远程服务器上运行测试,而不是在计算机上运行本地测试。

答案 3 :(得分:0)

我遇到了完全相同的问题,我建议您按照DurkoMatko的建议进行操作。 Documentation chromeWebSecurity

但是我在iframe中指向本地主机的链接遇到了另一个问题。 如果您要在iframe中使用链接,建议您这样做:

cy.get('iframe').then((iframe) => {
  const body = iframe.contents().find('body');
  cy.wrap(body).find('a').click();
});

答案 4 :(得分:0)

您可以禁用安全功能来解决此问题。

  1. 转到 cypress.json 文件。
  2. 写入 { "chromeWebSecurity": false } 并保存。
  3. 再次运行测试。