在Cypress中设置浏览器语言

在Cypress中设置浏览器语言,cypress,Cypress,由于我有一个应用程序需要用多种语言测试,是否可以让Cypress用某种语言(如德语)启动Chrome。我在文件中看不到这一细节,这表明目前不可能 我尝试在Chrome启动时添加--lang参数,但这似乎没有任何效果,Chrome仍然使用英语。请参阅下面的pluginsFile代码 module.exports = (on, config) => { on('before:browser:launch', (browser = {}, args) => { if (brow

由于我有一个应用程序需要用多种语言测试,是否可以让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
,但也没有成功。

我遇到了类似的问题,当启动cypress时,浏览器将使用我的默认语言(荷兰语),而我们所有的测试都希望英语是默认语言。我发现了一个关于参数lang param的问题,但它对我的浏览器语言没有影响

最后,我可以通过更改LANG环境变量来解决这个问题——我正在使用Linux。在终端中,我键入了以下内容:

export LANG=“en\u en.UTF-8”

然后我从同一个终端运行cypress。 您可以编写此脚本,对于其他操作系统,如MacOS和Windows,可能也有类似的环境变量。

请参阅中的完整示例,但简而言之

it('显示克林贡语问候语',()=>{
cy.visit('index.html'{
加载前加载(win){
//不起作用
//未捕获的TypeError:无法分配给只读属性
//对象“[object Navigator]”的“语言”
//win.navigator.language='Klingon'
//相反,我们需要定义这样的属性
Object.defineProperty(win.navigator,'language'{
值:“克林贡”
})
}
})
cy.contains('#问候语','nuqneH')。应('be.visible')
})

除了添加命令行选项外,还可以使用Cypress的浏览器启动API()更改浏览器首选项。这允许您覆盖如下接受语言标题设置:

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\u languages
可能会失败

对于我们的一个项目,这足以让我们正在测试的站点以正确的语言显示。如果您需要更多,可以尝试更改更多语言设置(请参阅并查找“intl”)


另一方面,据介绍,
--lang
命令行选项似乎只适用于Windows。在Mac上,您需要更改系统首选项,在Linux上,您可以使用语言环境变量。

您找到解决方案了吗?我还试图找到一个答案,您的web应用程序是如何使用这种语言的?你能给我一段代码吗?它只是看一下导航器语言吗?这能回答你的问题吗?这根本不起作用。选中
newdate().toLocalString()
,您将看到格式没有改变。我认为不可能用Javascript改变用户的语言,这是有充分理由的。这需要在Cypress级别上进行处理。您可能仍然希望以编程方式更改应用程序语言。它不能直接解决所有应用程序的问题,但在许多情况下,有可能覆盖浏览器的语言(从用户偏好、cookie、开关等)是有意义的。也许您可以分享关于无法更改语言的原因的见解?我们的应用程序实际上使用了
语言
数组,而不是
语言
字段(注意S)。在这种情况下,您必须稍微修改一下这个示例。这就是为什么
--lang
对我不起作用的原因。。。不管怎样,你知道如何在测试中改变吗?如果可能的话all@crollywood对不起,我已经几个月没有和Cypress合作了,我不知道。也许你可以问一个单独的问题和/或尝试Cypress的支持渠道。我想每次测试更改浏览器语言可能需要退出并重新启动浏览器。