1

如何获取 JSObject 或 JSContext 以从 Java 运行小程序?

我正在尝试自动化一些过程,这些过程包括点击网页中的某个链接,然后通过一个小程序,所以我所做的是通过 Java 发送一些 HTTPRequest,直到我得到一个带有标签的 HTML,通过 JSoup,我提取所有参数和代码库等。因为我也想运行小程序,所以我使用 ClassLoader 加载小程序类,我设置了一个自定义存根,它可以提供我之前提取的参数。

问题是这个小程序与浏览器有一些 javascript 交互,所以在某些时候它会执行 JSObject.getWindow(applet) 来获取文档并进行 js 调用,这就是我卡住的地方。我知道我必须能够提供一个 AppletContext,它应该实现一个 JSContext,并且能够提供这个 JSObject,它是浏览器提供的窗口。但是有可能嘲笑这样的事情吗?

4

1 回答 1

1

有一个偷偷摸摸的技巧,首先创建一个interface扩展AppletContextJSContext

private interface JSAwareAppletContext extends AppletContext, JSContext {
}

然后以某种方式模拟它,这样你就有了一个实例

final JSAwareAppletContext myAppletContext = //mock

现在您可以在 上模拟实时连接内容,JSAwareAppletContext如果从您的AppletStub.

以 Mockito 为例:

final JSAwareAppletContext appletContext = mock(JSAwareAppletContext.class);
final JSObject jsObject = mock(JSObject.class);
when(appletContext.getJSObject()).thenReturn(jsObject);
final AppletStub appletStub = mock(AppletStub.class);
when(appletStub.getAppletContext()).thenReturn(appletContext);
于 2013-09-25T18:12:52.873 回答