处理停止在Java / Selenium中处理的浏览器弹出窗口

问题描述 投票:0回答:2

环境:针对Chrome的Java中的Selenium测试

场景:在我的应用程序的GUI中,我有一个按钮,可以将一个完整的数据表单提交给外部服务,然后用户被重定向到外部服务登录页面。

因为我的应用程序在我的公司防火墙内,所以必须提供用户名/密码以供外部服务使用,但应用程序不知道这一点,因此不提供它(它在生产中会正常工作,但是测试环境是一个特例)。因此,会出现一个弹出窗口,在手动测试期间,测试仪会手动提供用户名和密码,然后提交对话框。这不是一个JavaScript对话框 - 我认为它是一个实际的模态Windows对话框,所以它有效地停止处理和selenium只是等待它直到它消失。

问题:我正在尝试自动执行此过程,并且无法通过对话框。因为对话框阻止了java / selenium的处理,所以我无法实现代码来处理对话框,例如集成AutoIt或使用Robot,因为在按下按钮后程序流永远不会到达该代码。通常,我会在后台安装一个独立版本的AutoIt在我的机器上运行并捕获弹出窗口(不理想,但它有效),但由于公司域策略中的限制非常严格,这是不可能的在短期内。我怀疑他们有可执行文件的白名单,所以让任何第三方工具工作可能会很棘手。

任何人都能想到解决这个问题的方法吗?

  • 无法使用警报,因为这些不是JavaScript对话框
  • 我必须能够输入用户名,密码并提交对话框
  • 无法使用AutoIt或Robot等集成功能
  • 由于域策略,无法使用AutoIt等独立工具

我怀疑这是不可能的,但值得检查是否有任何明亮的火花有任何想法。

java selenium automated-tests
2个回答
1
投票

它在WebDriver中不受支持,因此无法使用普通Selenium完成。

WebDriver项目中存在一个问题,即支持处理基本身份验证提示:

https://github.com/w3c/webdriver/issues/385

https://github.com/SeleniumHQ/selenium/issues/453

唉,问题是开放的,尚未实施。


1
投票

如果您不能使用其他进程的AutoIt,因为该进程必须在某个白名单中,那么您可以使用autoitx4java从另一个进程中使用它。如果您可以检测到对话框本身,那么您当然应该这样做,但AFAIK Chrome的对话框对AutoIt(基于Windows UIAutomation的任何其他技术)都是透明的。在这种情况下,只需在按下按钮之前生成线程,使该线程休眠1秒左右(在线程方法的第一个语句中),然后“盲目地”键入用户名,Tab键,密码和输入。它不是很元素,但我相信它应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.