获取JSObject或JSContext来运行applet
如何让JSObject或JSContext从Java运行applet?
我正在尝试自动化一些程序,包括在网页中点击一些链接,然后通过一个applet,所以我做的是通过Java发送一些HTTPRequest,直到我得到带有标签的HTML,通过JSoup,我提取所有参数和代码库等。因为我也想运行applet,我使用ClassLoader加载applet类,我设置了一个自定义存根,可以提供我之前提取的参数。
问题是这个applet与浏览器有一些javascript交互,所以在某些时候它会做一个JSObject.getWindow(applet)来获取文件并进行js调用,这里就是我被困住的地方。 我知道我必须能够提供一个应该实现JSContext的AppletContext,并且能够为这个JSObject提供它是浏览器提供它的窗口。 但有可能嘲笑这样的事情吗?
有一个偷偷摸摸的技巧,首先创建一个扩展AppletContext
和JSContext
的interface
private interface JSAwareAppletContext extends AppletContext, JSContext { }
然后以某种方式模拟,以便你有一个实例
final JSAwareAppletContext myAppletContext = //mock
现在,您可以在JSAwareAppletContext
上模拟实时连接,并从AppletStub
返回if。
例如与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);