当前位置:  开发笔记 > 编程语言 > 正文

Firefox中的HTTP Basic Auth通过URL不起作用?

如何解决《Firefox中的HTTPBasicAuth通过URL不起作用?》经验,为你挑选了4个好方法。

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

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

我一直在使用Firefox 2或3运行Selenium测试,在那里我仍然得到"需要身份验证"对话框窗口?

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



1> Fabricio Lem..:

有助于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驱动程序.

更新:

出于某种原因(可能是/sf/ask/17360801/中解释的那些),上述解决方案不适用于较新版本的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配置文件管理器并创建特定于测试的配置文件.

参考这个新解决方案:http://watirmelon.com/2012/06/27/automatic-firefox-authentication-when-using-selenium-webdriver-with-autoauth/



2> Druska..:

我有一个Firefox和Internet Explorer的解决方案.

对于Firefox,你需要进入about:config并创建长度为255 的整数network.http.phishy-userpass-length.如果用户名和密码少于255个字符,这将告诉Firefox不要弹出一个认证框.您现在可以使用http:// user:pass@domain.com进行身份验证.

对于Internet Explorer,您必须编辑注册表.在密钥HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE中,创建DWORD值iexplore.exeexplorer.exe并确保它们的值为0.

我不得不重写NTLM身份验证.要使用Firefox中的HTTP基本身份验证语法对NTLM进行身份验证,只需指定Firefox配置字符串network.automatic-ntlm-auth.trusted-uris中使用的域(随附第一个配置选项).这将在IE中与单独的注册编辑一起使用.



3> Andreas Pana..:

在上下文根之后添加斜杠:

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

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

它使世界的所有不同在上下文根的末尾添加斜杠.没有斜杠,弹出窗口会打开,斜杠会按预期进行身份验证.

注意,这不是硒虫或诸如此类的东西,而是一个firefox的东西.您也可以使用命令行自己查看:

 C:\Program Files\Mozilla Firefox>firefox http://myusername:myuserpassword@mydomain.com/mypath/

对我来说,即使没有设置网络uris它也可以工作:

FirefoxProfile profile = new FirefoxProfile();
//profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "mydomain.com");
//profile.setPreference("network.negotiate-auth.trusteduris", "mydomain.com");

WebDriver driver = new FirefoxDriver(profile);

driver.navigate().to("http://myusername:myuserpassword@mydomain.com/mypath/");


版本
Firefox 19.0,
selenium-java 2.31.0


希望我能给你更多的赞成,提到结束斜线是必需的......太棒了.把头撞在墙上......

4> Joey V...:

如果您使用的是FireFox驱动程序...您可以创建FireFox配置文件并将用户名/密码保存在密码管理器中,并使用附加组件进行自动登录.请记住,如果您在Selenium中创建FireFox或Chrome驱动程序,默认情况下它使用匿名配置文件.因此,不会使用任何常规扩展/附加组件等.因此,最好创建一个可以在源代码管理中分发和保存的配置文件.

1)在Windows中,从运行/开始菜单键入"firefox.exe -p",弹出配置文件管理器,并创建一个自定义的,它与你的代码的其余部分保存在一个位置.

2)不要在启动时询问是否检查

3)下载AutoAuth插件https://addons.mozilla.org/en-US/firefox/addon/autoauth/

4)访问需要HTTP基本身份验证的站点并保存凭据

下次访问该站点时,AutoAuth将在不显示需要身份验证的情况下登录您.

如果您有NTLM,则可以修改配置设置以包含主机名:network.automatic-ntlm-auth.trusted-uris

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有