【问题标题】:Connect Selenium WebDriver to SWT Browser embedded in a JPanel将 Selenium WebDriver 连接到 JPanel 中嵌入的 SWT 浏览器
【发布时间】:2019-09-19 20:31:24
【问题描述】:

我正在设置一个自动化框架,用于自动化 JavaFx 应用程序中的某些流程。有一个新用例,我们需要使用 SWT Browser API 在我们的应用程序中显示外部第三方网页。

由于我的应用程序使用 JavaFX 而不是 SWT,因此我必须使用提到的方法 here 嵌入 swt 浏览器。我们不得不使用 swt 浏览器,因为第三方应用程序提供的 API 使用 swt 事件侦听器与我的应用程序通信。

现在浏览器已嵌入,我们需要使用自动化测试来测试某些数据交换场景。我试图通过编写一些包装方法来使用SWTBrowser.execute(String script) 方法自动化流程。示例代码:

    public void setTextById(String id, String text) throws InterruptedException
    {
        Browser browser = getSwtBrowser();
        CountDownLatch latch = new CountDownLatch(1);
        browser.getDisplay().syncExec(new Runnable()
        {
            @Override public void run()
            {
                boolean result = browser
                        .execute("document.getElementById('" + id + "').setAttribute('value', '" + text + "');");
                latch.countDown();
            }
        });
        latch.await();
    }

但是这种方法似乎是在重新发明轮子并且容易出现很多错误。我计划使用 Selenium 在网页中进行一些内容访问/操作,因为我们已经将 Selenium 用于应用程序中的其他用例。

SWT 浏览器使用它所部署的操作系统的本机浏览器来呈现网页,如建议的here。它正在使用:

  • Windows 上的 IE 11
  • Ubuntu 上的 Safari 11

问题: 我们如何让 Selenium 连接到 SWTBrowser 的嵌入式操作系统浏览器的 WebDrivers 以访问 现有浏览器会话 中的 dom?

编辑: 又做了一点调试,注意到以下几点:

Selenium 有两部分用于自动化测试。 客户端服务器。客户端将自动化操作作为 HTTP POST 请求发送到服务器。服务器负责生成所需的浏览器并执行实际交互。

我正在浏览服务器的code,发现服务器使用 IELaunchURL()/CreateProcess() api 启动本机浏览器。还有一个 attachToBrowser(...) 方法。

我想通过发送嵌入在 SWTBrowser 中的 Internet Explorer 的进程信息来使用 attachToBrowser(...) 方法。这种方法还有另一个困难。看起来 SWTBrowser 并没有直接产生 IE 进程。它与 Internet Explorer 的 dll 交互。 无论如何我可以在这种情况下提取嵌入式IE进程的进程信息吗?或者有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: selenium selenium-webdriver javafx swt


    【解决方案1】:

    您必须启动一个新的 IE WebDriver,然后将其附加到现有浏览器。我挖了一下,我能想到的就是这个旧线程:Can Selenium interact with an existing browser session?

    此方法使用RemoteWebDriver,因此您需要独立版本的Selenium。对我来说 - 这似乎是一种矫枉过正,可能容易出错。我的建议是集成某种与嵌入式浏览器交互的图像识别软件。我知道 Sikuli 会做这样的事情,并且它有一个可用的 Java API。你可以在这里得到它:Sikuli

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2017-10-31
      • 2020-05-15
      • 1970-01-01
      • 2018-05-31
      相关资源
      最近更新 更多