Java 如何在Selenium WebDriver中执行FirefoxDriver、ChromeDriver和IEdriver的基本身份验证?
我正在使用Selenium Firefox驱动程序和Selenium Chrome驱动程序版本2.0a5(Web驱动程序API),我正在尝试测试一个具有基本身份验证的Web应用程序(当我点击任何页面时,都会出现一个弹出窗口来验证用户身份,弹出窗口不是HTML的一部分) 现在,我需要一个在Firefox、Chrome和IE中验证用户身份的策略(我将很快导入IE驱动程序) 我在几篇文章中读到可以设置Firefox配置文件,例如..类似于:Java 如何在Selenium WebDriver中执行FirefoxDriver、ChromeDriver和IEdriver的基本身份验证?,java,selenium,selenium-webdriver,cross-browser,basic-authentication,Java,Selenium,Selenium Webdriver,Cross Browser,Basic Authentication,我正在使用Selenium Firefox驱动程序和Selenium Chrome驱动程序版本2.0a5(Web驱动程序API),我正在尝试测试一个具有基本身份验证的Web应用程序(当我点击任何页面时,都会出现一个弹出窗口来验证用户身份,弹出窗口不是HTML的一部分) 现在,我需要一个在Firefox、Chrome和IE中验证用户身份的策略(我将很快导入IE驱动程序) 我在几篇文章中读到可以设置Firefox配置文件,例如..类似于: FirefoxProfile ffProfile = new
FirefoxProfile ffProfile = new FirefoxProfile();
ffProfile.setPreference("network.http.phishy-userpass-length", 255);
WebDriver driver = new FirefoxDriver(ffProfile);
driver.get("http://username:password@hostname");
但这似乎对我不起作用。是否有人为这些浏览器提供了一个有效的解决方案?有一个解决方案可以通过手动将HTTP头设置为来执行Selenium 1.x的身份验证,但我认为这不适用于Selenium 2,因为您没有访问头的权限 根据信息,Selenium 2 Beta 2中添加了“对Selenium 2的基本身份验证支持”,但通过查看源代码,我只能看到它是作为一种保护远程Selenium服务器不受匿名访问的方式实现的
因此,我认为答案是目前不支持基本HTTP身份验证。没错,基本HTTP身份验证目前不受支持,但我现在可以为FF和Chrome使用 我在问题中写的代码适用于那些驱动程序。我只是尝试使用FF3.6作为Firefox默认浏览器(安装在Firefox文件夹中),而不是FF4(目前还不支持)。对于IE,我可以尝试通过Windows注册表禁用身份验证
此页面可能会有所帮助。我通过以下方式使用Firefox webdriver:
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com");
driver = new FirefoxDriver(profile);
driver.Navigate().GoToUrl("http://user:pwd@google.com");
在代码中添加这个新的Firefox配置文件
ProfilesIni profile = new ProfilesIni();
FirefoxProfile myprofile = profile.getProfile("myProjectProfile"); //replace "myProjectProfile" with your profile"
WebDriver driver = new FirefoxDriver(myprofile);
Firefox配置设置
执行以下设置时,无需提示任何身份验证即可正常工作
- 在您的FF url上键入“about:config”
- 现在在搜索字段中键入“代理”
- 确保将“signon.autologin.proxy”设置为“true”(默认情况下 这是“假”)
加载默认/自定义Chrome配置文件以使用Selenium运行测试 网络驱动程序
DesiredCapabilities capability = DesiredCapabilities.chrome();
System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe");
capability.setCapability("chrome.switches", Arrays.asList("–disable-extensions"));
capability.setCapability("chrome.binary", "C:/Users/user_name/AppData/Local/Google/Chrome/Application/chrome.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=C:/Users/user_name/AppData/Local/Google/Chrome/User Data/Default");
driver = new ChromeDriver(capability);
注意:IE不需要配置文件设置来运行测试,因为它们在服务器用户上运行,而Firefox和Chrome使用binary。我无法使用Selenium 2和Chrome的基本身份验证(由于Chrome存在错误),因此我为Chrome创建了一个扩展,自动发送基本身份验证凭据(请参阅) 如果要在Internet explorer中启用http身份验证,则必须编辑注册表并添加此项(如果注册表项不存在,则创建注册表项):
HKEY\u CURRENT\u USER\Software\Microsoft\internetexplorer\Main\FeatureControl\FEATURE\u HTTP\u USERNAME\u PASSWORD\u DISABLE
中,创建一个值为0
HKEY\u LOCAL\u MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE\u HTTP\u USERNAME\u PASSWORD\u DISABLE
中,创建一个值为0
的DWORDiexplore.exe
HKEY\u LOCAL\u MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE\u HTTP\u USERNAME\u PASSWORD\u DISABLE
SendKeys("user");
SendKeys("{TAB}");
SendKeys("password");
SendKeys("~"); // Enter
另请参见以下功能请求:
相关的:
- 在QA-SE
driver.get(“http://username:password@谷歌(google.com/))
当密码包含@符号时,如何打开URL?任何建议。这会改善这种情况,但如果您正在运行测试的服务器使用http而不是https,这似乎还不够。在http上,您会得到登录提示,您仍然被卡住了。您在哪里指定用户名和密码?对于Chrome和IE,该怎么办?现在重新返回到我看不到您的代码在哪里指定用户名和密码。@Elmue此脚本绕过您的用户名和密码如果您在域中,Windows发送您当前会话的凭据,则可能会起作用。但对我来说,这是usless,因为我的计算机不在域中,我必须手动将它们输入te浏览器。在这种情况下,您的代码将无法工作。在您的情况下,可能不需要它
SendKeys("user");
SendKeys("{TAB}");
SendKeys("password");
SendKeys("~"); // Enter