如何在Selenium WebDriver中为FirefoxDriver,ChromeDriver和IEdriver执行基本身份validation?

我正在使用Selenium-Firefox驱动程序Selenium-Chrome驱动程序版本2.0a5( Web驱动程序API ),我试图testing一个具有BASICvalidation的Web应用程序(有一个popup窗口来validation用户我打任何页面,popup不是HTML的一部分)。

现在,我需要一个策略来在Firefox,Chrome和IE中validation用户身份(我即将导入IE驱动程序)。

我正在阅读一些文章,我可以设置一个Firefoxconfiguration文件,例如…类似于:

FirefoxProfile ffProfile = new FirefoxProfile(); ffProfile.setPreference("network.http.phishy-userpass-length", 255); WebDriver driver = new FirefoxDriver(ffProfile); driver.get("http://username:password@hostname"); 

但它似乎并没有为我工作。 有没有人有这些浏览器的工作解决scheme?

我通过以下方式使用Firefox webdriver:

 profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com"); driver = new FirefoxDriver(profile); driver.Navigate().GoToUrl("http://user:pwd@google.com"); 

当然,目前不支持BASIC HTTP身份validation,但是现在我可以在FF和Chrome上使用它了。

我在问题中写的代码适用于那些司机。 我只是尝试使用FF3.6作为Firefox默认浏览器(安装在Firefox文件夹中),而不是FF4(不支持)。 对于IE浏览器,我可能会尝试通过Windowsregistry禁用身份validation。

此页面http://code.google.com/p/selenium/issues/detail?id=34可能会有所帮助。;

在代码中添加这个新的Firefoxconfiguration文件

 ProfilesIni profile = new ProfilesIni(); FirefoxProfile myprofile = profile.getProfile("myProjectProfile"); //replace "myProjectProfile" with your profile" WebDriver driver = new FirefoxDriver(myprofile); 

Firefoxconfiguration设置

这可以正常工作,而不会在进行以下设置时提示进行任何身份validation。

  • 在FFurl上input“ about:config
  • 现在在search字段中input“ 代理
  • 确保“ signon.autologin.proxy ”设置为“ true ”(默认为“false”)

加载默认/自定义Chromeconfiguration文件,使用Selenium WebDriver运行testing


  1. 下载chromedriver.exe
  2. 提取chromedriver_win_26.0.1383.0.zip文件夹并将.exe文件findC:/文件夹

在你的JAVA代码中添加这个脚本

 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不需要configuration文件设置来运行testing,因为它们在服务器用户上运行,而Firefox和Chrome使用二进制。

如果您想在Internet Explorer中启用http身份validation,您必须编辑registry并添加(创build密钥,如果它们不存在):

  1. HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE ,创build一个值为0的DWORD iexplore.exe

  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE ,创build一个值为0的DWORD iexplore.exe

  3. closures并重新打开Internet Explorer

如果你有一个x64 IE,path有点不同:

  • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

为了更多的便携性,可以通过存根API和Alert来处理。

示例Java代码( 示例 ):

 import org.openqa.selenium.Alert; import org.openqa.selenium.security.Credentials; public void authenticateUsing(Credentials credentials) { private final Alert alert; alert.authenticateUsing(credentials); } 

另请参阅: auth_tests.py

或者通过手动发送密钥,如:

 SendKeys("user"); SendKeys("{TAB}"); SendKeys("password"); SendKeys("~"); // Enter 

请参阅以下function请求: #453在GitHub上的便携式BASIC身份validation

有关:

  • 如何在Selenium中发送基本身份validation标头? 在QA SE

有一个用Selenium 1.x执行validation的解决scheme,方法是手动设置http标题在http://mogotest.com/blog/2010/06/23/how-to-perform-b​​asic-auth-in-selenium,但我不要认为这是可以转移到selenium2,因为你没有访问标题。

根据这里的信息,Selenium 2 Beta 2中增加了对Selenium 2的基本身份validation支持,但是通过源代码查看,我只能看到它被实现为保护远程Selenium服务器免受匿名访问的一种方式。

所以我认为答案是目前不支持BASIC HTTP身份validation。

我无法使用Selenium 2和Chrome进行基本身份validation(由于Chrome存在一个问题),所以我为Chrome自动发送了基本身份validation凭据(请参阅https://chrome.google.com/webstore/)。; detail / basic-authentication-auto / dgpgkkfheijbcgjklcbnokoleebmeokn )。