java - Chrome 59 和使用 Selenium/Fluentlenium 的基本身份验证

标签 java google-chrome selenium fluentlenium

Chrome 59 有 removed support for https://user:password@example.com URLs .

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

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

selenium-only 版本有同样的问题:

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 中却没有。有什么替代方法吗?

最佳答案

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

简而言之:在访问被测 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/ ”),并且这种设置凭据的解决方法不会带来相同的风险。

See zoonabar's answer

关于java - Chrome 59 和使用 Selenium/Fluentlenium 的基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44542740/

相关文章:

google-chrome - 为什么 Chrome 开发者工具的计算样式显示的内容与样式选项卡不同?

Selenium webdriver - 等待页面重新加载

java - 无法将Spring云配置服务器连接到本地存储库窗口

javascript - 谁为 webkit 编写了 250k 测试?

javascript - 单击 'Allow in Incognito' 按钮时,Chrome 扩展被永久禁用

java - 使用 Selenium WebDriver 运行 TOR 浏览器

java - Appium需要手动启动Android模拟器吗?

java - 使用反射调用公共(public)方法

java - 在neo4j中使用dijkstra算法时如何限制深度?

java - 将我的 JMenus 放在自己的类中更好还是全部放在同一个类中更好?