在Firefox中通过URL进行HTTP基本身份验证不起作用?


问题内容

我知道通常您可以通过在URL中传递用户名和密码来登录需要Selenium进行HTTP基本身份验证的网站,例如:

selenium.open("http://myusername:myuserpassword@mydomain.com/mypath");

我已经在Firefox 2或3上运行了Selenium测试,仍然可以看到“需要身份验证”对话框窗口?

更新:这似乎不是Selenium问题,而是Firefox问题。如果我在FF中手动输入URL,则会看到验证对话框,但是如果我在Opera中输入URL,则显示的页面将不显示验证对话框。


问题答案:

有助于Druska的答案,您可以使用Selenium 2 API进行相同的配置:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.automatic-ntlm-auth.trusted-uris","yourDomain");
new FirefoxDriver(profile);

这种方法比较简单,您不必要求每个开发人员都更改其Firefox配置。我仅使用Firefox驱动程序进行了测试。

更新:

由于某种原因,以上解决方案不适用于较新版本的Firefox。这是现在对我有效的(已在Firefox 19.0.2上测试):

安装AutoAuth Firefox插件;
访问需要身份验证的站点。输入您的用户名和密码,并确保选择保存凭据;
将AutoAuth安装文件保存在硬盘上:在插件页面上,右键单击“添加到Firefox”和“将链接另存为”;
实例化Firefox webdriver,如下所示:


FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
File pluginAutoAuth = new File("src/test/resources/autoauth-2.1-fx+fn.xpi");
firefoxProfile.addExtension(pluginAutoAuth);
return new FirefoxDriver(firefoxProfile);

确保使用保存插件安装的正确路径实例化pluginAutoAuth文件。如果您不喜欢使用默认配置文件,则可以使用Firefox Profile Manager并创建一个特定于您的测试的文件。