Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Selenium WebDriver中执行FirefoxDriver、ChromeDriver和IEdriver的基本身份验证?_Java_Selenium_Selenium Webdriver_Cross Browser_Basic Authentication - Fatal编程技术网

Java 如何在Selenium WebDriver中执行FirefoxDriver、ChromeDriver和IEdriver的基本身份验证?

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

我正在使用Selenium Firefox驱动程序和Selenium Chrome驱动程序版本2.0a5(Web驱动程序API),我正在尝试测试一个具有基本身份验证的Web应用程序(当我点击任何页面时,都会出现一个弹出窗口来验证用户身份,弹出窗口不是HTML的一部分)

现在,我需要一个在Firefox、Chrome和IE中验证用户身份的策略(我将很快导入IE驱动程序)

我在几篇文章中读到可以设置Firefox配置文件,例如..类似于:

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运行测试 网络驱动程序


  • 下载chromedriver.exe
  • 解压缩chromedriver\u win\u 26.0.1383.0.zip文件夹,并将.exe文件定位到C://文件夹
  • 在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不需要配置文件设置来运行测试,因为它们在服务器用户上运行,而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
    的DWORD
    iexplore.exe

  • 关闭并重新打开Internet explorer

  • 如果您使用的是x64 IE,则路径有点不同:

    • HKEY\u LOCAL\u MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE\u HTTP\u USERNAME\u PASSWORD\u DISABLE

    为了提高可移植性,这可以通过存根API和使用来处理

    示例Java代码():

    另见:

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

    SendKeys("user");
    SendKeys("{TAB}");
    SendKeys("password");
    SendKeys("~"); // Enter
    
    另请参见以下功能请求:

    相关的:

    • 在QA-SE

    干得好!你介意分享扩展的源代码吗?它在扩展本身中提供。我发现另一个Chrome插件也做同样的事情:“HTTP基本身份验证的多路径”它工作得很好。对于Chrome NTLM身份验证问题,这个答案可能有助于身份验证
    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