因为我有一个应用程序需要用多种语言进行测试,所以可以告诉赛普拉斯使用某种语言(例如德语)启动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
,该方法也无效。
答案 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,可能存在类似的环境变量。