在赛普拉斯中设置浏览器语言

时间:2019-02-13 13:23:04

标签: cypress

因为我有一个应用程序需要用多种语言进行测试,所以可以告诉赛普拉斯使用某种语言(例如德语)启动Chrome。我在文档中的任何地方都看不到详细信息,这表明目前尚不可能。

我尝试在启动Chrome时添加--lang参数,但这似乎没有任何效果,Chrome仍使用英语。请参见下面的pluginsFile代码。

module.exports = (on, config) => {
  on('before:browser:launch', (browser = {}, args) => {
    if (browser.name === 'chrome') {
      args.push('--lang=de')
      return args
    }
  })
}

我还尝试了--lang=de-DE,该方法也无效。

3 个答案:

答案 0 :(得分:5)

除了添加命令行选项外,您还可以使用Cypress的Browser Launch API(documentation)更改浏览器首选项。这样,您可以像这样覆盖Accept-Language标头设置:

on('before:browser:launch', (browser, launchOptions) => {
  if (browser.family === 'chromium' && browser.name !== 'electron') {
    launchOptions.preferences.default.intl = { accept_languages: "nl" }
    return launchOptions
  }
}

请注意,launchOptions.preferences.default对象可能为空,因此尝试直接分配给launchOptions.preferences.default.intl.accept_languages可能会失败。

对于我们的一个项目,这足以使我们测试的网站以正确的语言显示。如果需要更多内容,可以尝试更改更多语言设置(请参见Chrome's source code并查找“ intl”)。

另一方面,根据Chrome's documentation--lang命令行选项似乎仅适用于Windows。在Mac上,需要更改系统偏好设置;在Linux上,可以使用LANGUAGE环境变量。

答案 1 :(得分:3)

https://glebbahmutov.com/blog/cypress-tips-and-tricks/#control-navigatorlanguage中查看完整示例,但总之

it('shows Klingon greeting', () => {
  cy.visit('index.html', {
    onBeforeLoad (win) {
      // DOES NOT WORK
      // Uncaught TypeError: Cannot assign to read only property
      // 'language' of object '[object Navigator]'
      // win.navigator.language = 'Klingon'

      // instead we need to define a property like this
      Object.defineProperty(win.navigator, 'language', {
        value: 'Klingon'
      })
    }
  })
  cy.contains('#greeting', 'nuqneH').should('be.visible')
})

答案 2 :(得分:1)

我有一个类似的问题,当启动cypress时,浏览器将使用我的默认语言(荷兰语),而我们所有的测试都希望英语是默认语言。我在support-forum上发现了一个问题,其中也提到了参数--lang参数,但这对我的浏览器的语言没有影响。

最后,我可以通过更改LANG环境变量来解决此问题-我使用的是Linux。在终端中,我输入了以下内容:

export LANG="en_EN.UTF-8"

然后我从同一终端运行柏树。 您可以编写脚本,对于其他操作系统,例如MacOS和Windows,可能存在类似的环境变量。