【发布时间】: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