【问题标题】:Handling browser pop-ups that stop processing in Java/Selenium处理在 Java/Selenium 中停止处理的浏览器弹出窗口
【发布时间】:2018-10-02 02:15:57
【问题描述】:

环境:在 Java 中针对 Chrome 进行 Selenium 测试

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

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

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

有人能想出办法吗?

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

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

【问题讨论】:

    标签: java selenium automated-tests


    【解决方案1】:

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

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

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

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

    唉,问题是开放的,还没有实施。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这是一个很好的解决方案。遗憾的是,它在我的情况下不起作用,因为外部服务的响应时间非常不稳定且缓慢 - 有时可能需要 40-50 秒才能响应。所以盲目的sendkeys不会真正起作用。不过谢谢你的建议
      • 也许您可以检测到对话框以某种方式打开,即使在尝试查找元素或类似内容时捕获超时异常,然后调用将盲目输入用户名的另一个进程和密码。
      猜你喜欢
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      相关资源
      最近更新 更多