我正在尝试在我的一个新 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 扩展程序#
- 创建一个名为“extension”的文件夹
- 在“扩展”文件夹中创建一个名为“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 }
- 在“extension”文件夹中创建一个名为“webrequest.js”的文件,将下面的代码复制粘贴到文件中并保存。
chrome.webRequest.onAuthRequired.addListener( function handler(details){ return {'authCredentials': {username: "yourusername", password: "yourpassword"}}; }, {urls:["<all_urls>"]}, ['blocking']);
打开 chrome 浏览器,转到 chrome://extensions 并打开开发者模式
点击'打包扩展',选择根目录作为'扩展'并打包扩展。它应该创建一个扩展名为“.crx”的文件
#Step2:将扩展添加到您的测试自动化框架中#
- 将 .crx 文件复制到您的框架中
- 配置您的 webdriver 创建以加载扩展,如
options.addExtensions(new File("path/to/extension.crx")); options.addArguments("--no-sandbox");
- 调用您的网络驱动程序和应用程序 URL
- 您不会看到由上述扩展程序处理的身份验证弹出窗口
测试愉快!
引用资料:
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/