我知道通常您可以通过在URL中传递用户名和密码来登录到需要使用Selenium进行HTTP基本身份验证的站点,例如:
selenium.open("http://myusername:myuserpassword@mydomain.com/mypath");
我一直在用Firefox2或3运行Selenium测试,但仍然看到"Authentication Required“对话框窗口?
更新:这似乎不是Selenium的问题,而是Firefox的问题。如果我在FF中手动输入URL,我将获得身份验证对话框,但如果我在Opera中输入URL,则会显示我的页面,但不显示身份验证对话框。
发布于 2011-11-14 21:02:34
如果您使用的是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.auto-ntlm-auth.trusted-uris
发布于 2010-06-11 17:23:19
您可以尝试像这样直接操作标头:
首先,当你开始的时候,你必须启用Selenium ti操作头:
selenium.start("addCustomRequestHeader=true");
然后,您必须使用一些基本的编码和头操作,如下所示:
String authHeader = "";
try {
BASE64Encoder coder = new BASE64Encoder();
authHeader = coder.encode("developers:Str492ight".getBytes());
}
catch (Exception e)
{
e.printStackTrace();
}
setUpSelenium();
startSelenium();
selenium.addCustomRequestHeader("Authorization", "Basic " + authHeader);
selenium.open("/");
selenium.waitForPageToLoad("10000");
Basic后的空格是必需的。这是一个基本的HTTP身份验证头的样子。
此外,您可以使用一些Http Watcher来查看请求是否包含您的身份验证请求。
要么使用Wireshark,要么使用Fiddler或Charles Proxy。
希望这能帮上忙。格格利。
发布于 2010-08-12 00:15:29
如前所述,addCustomRequestHeader解决方案只能使用代理注入模式。但当我尝试实现它时,我遇到了与代理注入模式相关的其他问题。
在使用Java客户端时,我不清楚代理注入是否能正常工作。每当我调用open()时,我都会收到一个奇怪的错误:"this.onXhrStateChange.bind不是一个函数“。我发现的唯一解决方案是,您需要向open()方法添加一个值为'true‘的额外参数,但Java客户端API只接受一个参数。
因此,我不得不接受上面解释的浏览器配置解决方案,我对此并不是很满意,因为它们取决于供应商是否愿意支持它们。
将您的测试移植到Selenium 2 (目前仍是alpha )可能是一个更好的前景,但在我的例子中,只有Selenium Grid支持Selenium 2,这才是可能的。
希望这能帮助任何人,塞巴斯蒂安
https://stackoverflow.com/questions/3021602
复制相似问题