我正在通过浏览器设置在支持多种语言的Web应用程序上编写测试。
我写了一个RequestHook
覆盖了Accept-Language
标头。但是,这似乎不起作用。该语言似乎总是在美国(我猜是从我的系统上来的吗?)
import { Selector } from 'testcafe';
class LanguageRequestHook extends RequestHook {
constructor(language, requestFilterRules) {
super(requestFilterRules, {
includeHeaders: true,
includeBody: true});
this.language = language;
}
async onRequest(event) {
event.requestOptions.headers['Accept-Language'] = this.language;
}
async onResponse(responseEvent) {
//Nothing
}
}
const dutchLanguageHook = new LanguageRequestHook('nl-NL');
fixture('hook test').page('https://www.wikipedia.org/').requestHooks(dutchLanguageHook);
test('test dutch wiki', async t => {
await t.expect(Selector('.localized-slogan').innerText).eql('De vrije encyclopedie');
});
使用我的RequestHook
,我希望请求能表明它希望使用荷兰维基百科页面,而不是英语版本。 RequestHook
确实在调试器中被调用。
答案 0 :(得分:1)
您的代码看起来正确。确保通过更改要测试的网站上的“ Accept-Language”标头来设置语言。 您提供的示例无效,因为Wikipedia网站不支持通过更改“ Accept-Language”标头设置的语言。 您可以通过运行以下脚本进行检查:
const rp = require('request-promise');
const cheerio = require('cheerio');
const options = {
url: 'https://www.wikipedia.org/',
headers: {
'Accept-Language': 'nl-NL'
}
};
rp(options)
.then(body => {
return cheerio.load(body);
})
.then($ => {
console.log($('.localized-slogan').text());
})
.catch(e => console.error(e));