java - 如何使用 Java 使用 Selenium WebDriver 在 Chrome 中处理身份验证弹出窗口

标签 java google-chrome selenium authentication selenium-webdriver

我正在尝试在我的一个新 Webdriver 脚本中处理身份验证弹出窗口。我有一个适用于 IE 的有效解决方案,但我在 Chrome 上苦苦挣扎。 IE 就像遵循 [此页面] 上的建议一样简单:How to handle authentication popup with Selenium WebDriver using Java .该线程并未显示适用于 Chrome 的出色解决方案,尽管有几位评论员指出该解决方案不适用于 Chrome。问题是,当您尝试在 Chrome 上执行以下代码时,登录弹出窗口不是警报。

 WebDriverWait wait = new WebDriverWait(driver, 10);      
 Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
 alert.authenticateUsing(new UserAndPassword(**username**, **password**));

这不是windows level () 身份验证弹出窗口,网页只是受密码保护。我知道这个问题在 Stack Overflow 上还有其他几个例子,但我最近没有看到超过 2 年的问题。我希望现在 2017 年有更好的解决方案。提前致谢。

最佳答案

可能有助于其他人在 chrome 扩展的帮助下解决 chrome 中的这个问题。感谢@SubjectiveReality 给了我这个想法。

如果同一服务器执行身份验证并托管应用程序,则将用户名和密码作为 url 的一部分发送,如 https://username:password@www.mytestsite.com 可能会有所帮助。然而,大多数企业应用程序都具有公司范围的身份验证,应用程序服务器可能会将请求重新路由到身份验证服务器。在这种情况下,在 URL 中传递凭据将不起作用。

解决方法如下:

#Step1:创建 chrome 扩展程序#

  1. 创建一个名为“extension”的文件夹
  2. 在“扩展”文件夹中创建一个名为“manifest.json”的文件。将以下代码复制到文件中并保存。

{ "name":"Webrequest API", "version":"1.0", "description":"Extension to handle Authentication window", "permissions":["<all_urls>","webRequest","webRequestBlocking"], "background": { "scripts" : ["webrequest.js"] }, "manifest_version": 2 }

  1. 在“extension”文件夹中创建一个名为“webrequest.js”的文件,将下面的代码复制粘贴到文件中并保存。
chrome.webRequest.onAuthRequired.addListener(
function handler(details){
 return {'authCredentials': {username: "yourusername", password: "yourpassword"}};
},
{urls:["<all_urls>"]},
['blocking']);
  1. 打开 chrome 浏览器,转到 chrome://extensions 并打开开发者模式

  2. 点击'打包扩展',选择根目录作为'扩展'并打包扩展。它应该创建一个扩展名为“.crx”的文件

#Step2:将扩展添加到您的测试自动化框架中#

  1. 将 .crx 文件复制到您的框架中
  2. 配置您的 webdriver 创建以加载扩展,如
options.addExtensions(new File("path/to/extension.crx"));
options.addArguments("--no-sandbox");
  1. 调用您的网络驱动程序和应用程序 URL
  2. 您不会看到由上述扩展程序处理的身份验证弹出窗口

测试愉快!

引用资料:

http://www.adambarth.com/experimental/crx/docs/webRequest.html#apiReference https://developer.chrome.com/extensions/webRequest#event-onAuthRequired chrome.webRequest.onAuthRequired Listener https://gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46

关于java - 如何使用 Java 使用 Selenium WebDriver 在 Chrome 中处理身份验证弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42114940/

相关文章:

javascript - 即使所选选项没有更改,是否有任何方法可以在 Chrome 中的 SELECT 元素上触发点击事件?

java - 尽管不再有 WebElement,循环 List<WebElement> 仍不会停止

java - 两个 JFrames 同时运行

java - @RequiredArgsConstructor(onConstructor = @__(@Inject)) 和@RequiredArgsConstructor 有什么区别?

css - 为什么我的页面在 Safari 和 firefox 中的起始位置比在 Chrome 中高?

javascript - Chrome扩展回调函数和并发

python - 如何使用 selenium 和 python 单击加载 ajax 数据的链接

java - @FixMethodOrder(MethodSorters.NAME_ASCENDING) 在 Junit4 和 5 组合代码中不起作用

java - 使用 JDBC 的参数化查询

Java:将集合类型转换为子类型