无法为firefox更改selenium-webdriver的语言

问题描述 投票:0回答:1

我正在运行基于selenium-webdriver(firefox)的e2e测试。我的一些测试用例基于比较结果消息。问题是当我在我的本地计算机(和我的本地firefox浏览器)上运行测试时,语言会自动从EN更改,这会破坏我的一些测试用例(比较相同的消息但是使用不同的语言)。首先,我尝试在浏览器中更改它。我重新排列了我的首选语言列表,以便EN位于第一个位置。在每次测试运行中,它都会返回到原始顺序(第二个位置为EN)。我也尝试删除自动选择的语言。但是在第一次测试运行之后,语言列表会回到之前的形式(EN是第二个)。

接下来,我尝试为我的webdriver设置语言。我的最终代码:

let profile = new firefox.Profile().setPreference("intl.accept_languages", "en-US");
let options = new firefox.Options().setProfile(profile);

let driverBuilder = new selenium.Builder().forBrowser(webDriverConfig.browserName).setFirefoxOptions(options).build();

但这根本不起作用。在测试期间,我仍然得到错误的语言环境,并且在我的firefox设置中运行测试后,我仍然在第一个地方(在语言首选项列表中)得到错误的语言。在测试期间,如何将英语设为我接受/首选的语言?

node.js selenium firefox selenium-webdriver selenium-firefoxdriver
1个回答
0
投票

好的,我已经解决了。问题是我混合了两种方法,我在selenium-webdriver代码的评论中找到了它们。我在github(最近的主分支)上找到的第一个看起来像这样:

let options = new firefox.Options()
    .addExtensions('/path/to/firebug.xpi')
    .setPreference('extensions.firebug.showChromeErrors', true);

所以,这里可以在Options对象上调用setPreference()。此代码段来自最新的master分支。问题是,当前主服务器被释放为不稳定(4.0.0-alpha.sth ...)。最新发布的稳定版本是3.6.0,apis之间存在很多差异。所以我在我的项目中引用的selenium-webdriver包中直接找到了类似的代码示例,并在该版本中设置首选项如下所示:

let profile = new firefox.Profile();
profile.addExtension('/path/to/firebug.xpi');
profile.setPreference('extensions.firebug.showChromeErrors', true);

let options = new firefox.Options().setProfile(profile);

在这个稳定版本的api中,setPreference()方法属于Profile类。但除此之外还有另一个很大的不同。在4.0.0版本的api中,该方法返回修改后的对象本身,而在稳定版本中,该方法仅设置状态。所以这在稳定版本中不起作用:

let profile = new firefox.Profile().setPreference("intl.accept_languages", "en-US");

这是正确的代码:

let profile = new firefox.Profile();
profile.setPreference("intl.accept_languages", "en,en-US");

最后,如果你想为firefox webdriver设置语言环境,这里有selenium-webdriver 3.6.0代码的工作示例:

let profile = new firefox.Profile();
profile.setPreference("intl.accept_languages", "en,en-US");

let options = new firefox.Options().setProfile(profile);

let driver = new selenium.Builder()
    .forBrowser('firefox')
    .setFirefoxOptions(options)
    .build();

对于selenium-webdriver 4.0.0:

let options = new firefox.Options()
    .setPreference("intl.accept_languages", "en,en-US");

let driver = new selenium.Builder()
    .forBrowser('firefox')
    .setFirefoxOptions(options)
    .build();
© www.soinside.com 2019 - 2024. All rights reserved.