获取JSObject或JSContext来运行applet

时间:2013-09-25 18:07:38

标签: java applet jsobject

如何让JSObject或JSContext从Java运行applet?

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

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

1 个答案:

答案 0 :(得分: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);