Java Selenium-通过url进行基本身份验证

Java Selenium-通过url进行基本身份验证,java,google-chrome,selenium,selenium-webdriver,basic-authentication,Java,Google Chrome,Selenium,Selenium Webdriver,Basic Authentication,在我的Selenium测试中(使用chromedriver-2.24),我试图通过以下声明的基本身份验证访问我的网页: WebDriver driver = ...; driver.get("http://admin:admin@localhost:8080/project/"); 但是Google Chrome在控制台中给了我以下警告: [Deprecation]其URL包含嵌入凭据的子资源请求(例如https://user:pass@主机/)被阻止。有关更多详细信息,请参阅 在标记的链接

在我的
Selenium测试中
(使用
chromedriver-2.24
),我试图通过以下声明的基本身份验证访问我的网页:

WebDriver driver  = ...;
driver.get("http://admin:admin@localhost:8080/project/");
但是Google Chrome在控制台中给了我以下警告:

[Deprecation]其URL包含嵌入凭据的子资源请求(例如
https://user:pass@主机/
)被阻止。有关更多详细信息,请参阅

在标记的链接中提到支架已脱落:

放弃对子资源请求中嵌入凭据的支持。(已删除)

我现在的问题是,有没有其他方法可以从Selenium进行基本身份验证


注意:这没有帮助:

通过url的基本身份验证仅针对子资源被阻止。 因此,您仍然可以在域上使用它:

driver.get("http://admin:admin@localhost:8080");
driver.get("http://localhost:8080/project");
您还可以创建一个小扩展,以便在请求凭据时自动设置凭据:

options = webdriver.ChromeOptions()
options.add_extension(r'C:\dev\credentials.zip')

此中有一些更新,如:

放弃对子资源请求中嵌入凭据的支持。(已删除)

我们应该阻止对包含嵌入式凭据(例如“”)的子资源的请求。这些资源将作为网络错误处理

但是,基本身份验证功能仍然可以通过Selenium Java绑定与Selenium 3.4.0、geckodriver v0.18.0、chromedriver v2.31.488763、Google Chrome 60.x和Mozilla Firefox 53.0配合使用

下面是一个示例代码,它尝试使用一组有效的凭据打开URL,并且可以正常工作

火狐: 铬:
Florent B.的呼叫方法。两次登录URL对我来说都很有效,只是做了一点修改。在JS中:

driver
        .get('http://admin:admin@localhost:8080')
        .then( () => driver.get('http://localhost:8080') )
使用ChromeDriver 2.33.506092开发google chrome 62.0.3202.94,该方法似乎与firefox 56.0.2、geckodriver 0.19.1和phantomjs 2.1.1兼容,所有这些都是在Debian linux 9下开发的


我相信第一次调用会设置浏览器发送的授权标头。第二个调用从URL中删除凭据,并且凭据不再应用于子资源。
然后
同步两个请求以确保顺序。

chrome的新功能和通过远程调试进行的基本身份验证:仅用于将其链接到此处,因此陷入困境的人可以找到chrome和其他解决方案:

使用selenium驱动程序直接不支持此类基本身份验证。get(URL)方法在JavaScript弹出窗口中加载提示身份验证的URL,我也在这里停留了很长时间。这是因为Chrome驱动程序在更新59(可能)后不允许使用这种身份验证技术。仍然有通过Selenium使用浏览器中的JavaScript引擎加载此类URL的后门

driver.get("https://www.google.com");
JavascriptExecutor jse = (JavascriptExecutor) driver;
URL = "https://username:password@www.example.com";
jse.executeScript("window.open('"+URL+"')");

请尝试以下解决方案:@jadupl链接中建议的解决方案对我不起作用,在第一次调用后,凭据不会被缓存…那么您可能唯一的解决方案是设置代理服务器,您将与WebDriver连接,代理服务器将添加基本身份验证标题您的第一个建议对我不起作用:/I在运行selenium测试时,我仍然在chrome中得到登录提示。另一个我没看过at@florent-b、 我到处都在找这样的东西!选项#2解决了AJAX请求、CGI表单提交、重定向等问题。该扩展非常有效,但不适用于CI上无头模式下的Chrome:-(有人可以帮助并扩展JAVA的这个答案吗?)仅上述两行选项不起作用
driver
        .get('http://admin:admin@localhost:8080')
        .then( () => driver.get('http://localhost:8080') )
driver.get("https://www.google.com");
JavascriptExecutor jse = (JavascriptExecutor) driver;
URL = "https://username:password@www.example.com";
jse.executeScript("window.open('"+URL+"')");