Get a JSObject or JSContext to run an applet

岁酱吖の 提交于 2019-12-08 06:18:53

问题


How to get a JSObject or JSContext to run an applet from Java?

I'm trying to automate some procedure that consists in some link clicking in a web and then going through an applet, so what I do is to send some HTTPRequests through Java until I get a HTML with the tag from which, through JSoup, I extract all the parameters and codebase, etc. As I want to run the applet as well, I load the applet class with a ClassLoader, I set a custom stub that can give the parameters that I extracted previously.

The thing is that this applet has some javascript interaction with the browser, so at some point it does a JSObject.getWindow(applet) to get the document and make the js calls and here is where I'm stuck. I understand that I have to be able to provide an AppletContext which should implement a JSContext and be able to provide this JSObject that it's the window as the browser would provide it. But is it possible to mock such a thing?


回答1:


There is a sneaky trick, first create an interface that extends AppletContext and JSContext

private interface JSAwareAppletContext extends AppletContext, JSContext {
}

Then mock that somehow so you have an instance

final JSAwareAppletContext myAppletContext = //mock

Now you can mock the live connect stuff on the JSAwareAppletContext and return if from your AppletStub.

For example with 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);


来源:https://stackoverflow.com/questions/19012136/get-a-jsobject-or-jscontext-to-run-an-applet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!