9

Chrome 59 已移除对 https://user:password@example.com URL 的支持

我有一个使用此功能的测试,该功能现已损坏,因此我尝试将其替换为等待身份验证弹出窗口并填写详细信息的版本。但是以下内容在 Chrome 上不起作用(它不会将身份验证弹出窗口视为警报):

alert().authenticateUsing(new UserAndPassword("test", "test"));

仅硒版本有同样的问题:

WebDriverWait wait = new WebDriverWait(getDriver(), 10);      
Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
alert.authenticateUsing(new UserAndPassword("test", "test"));

(基于此处给出的答案:How to handle authentication popup with Selenium WebDriver using Java

我可以看到在 FireFox 中处理此问题的几种解决方法,但对于 Chrome 则没有。有没有替代方法?

4

4 回答 4

10

我确信 Florent B 的解决方案是可行的,但是为了改造旧测试,我发现 zoonabar 发布到这个重复问题的解决方案更容易实现,需要的代码少得多,并且不需要对测试框进行特殊准备。对于查看代码的新开发人员来说,似乎也更容易理解。

简而言之:在访问被测 URL(没有凭据)之前访问具有凭据的任何 URL 将导致浏览器记住凭据。

goTo("http://user:password@localhost"); // Caches auth, but page itself is blocked
goTo("http://localhost"); // Uses cached auth, page renders fine
// Continue test as normal

这可能感觉像是浏览器中的一个漏洞,将被修补,但我认为这不太可能;已施加限制以避免网络钓鱼风险(选择的用户名看起来像域,例如“ http://google.com:long-token-here-which-makes-the-real-domain-disappear@example.com / "),并且这种设置凭据的解决方法不会带来相同的风险。

查看zoonabar的答案

于 2017-06-16T12:00:41.637 回答
2

一种解决方案是运行透明代理来注入带有所需凭据的标头。

但另一个更简单的解决方案是创建一个小扩展来自动设置凭据:

https://gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46

于 2017-06-14T12:03:25.657 回答
0

https://bugs.chromium.org/p/chromium/issues/detail?id=435547#c33中,您可以看到一个 mkwst 说存在一个关于基本身份验证凭据的错误,并且同源站点使其稳定。

如果您使用“--disable-blink-features=BlockCredentialedSubresources”或转到 Chrome Canary 版本,您可能会发现您看到的原始问题不再发生......

于 2017-07-03T15:19:09.057 回答
0

Florent B. 在 chrome 扩展的帮助下找到了一个解决方案,该扩展是在硒测试中动态添加的。如果需要,扩展处理基本身份验证凭据:

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("C:/path_to/credentials_extension.zip"));
driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), options);

Chrome扩展代码: https ://gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46
(只需修改background.js中的用户名和密码,然后将文件background.js和manifest.json压缩到credentials_extension.zip)

在这里找到:Selenium - 通过 url 进行基本身份验证

于 2018-09-21T16:31:34.130 回答