我知道通常你可以通过在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驱动程序.
更新:
出于某种原因(可能是/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/
我有一个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.exe和explorer.exe并确保它们的值为0.
我不得不重写NTLM身份验证.要使用Firefox中的HTTP基本身份验证语法对NTLM进行身份验证,只需指定Firefox配置字符串network.automatic-ntlm-auth.trusted-uris中使用的域(随附第一个配置选项).这将在IE中与单独的注册编辑一起使用.
在上下文根之后添加斜杠:
代替:
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
如果您使用的是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