2013-09-25 2 views
1

Как получить JSObject или JSContext для запуска апплета с Java?Получить JSObject или JSContext для запуска апплета

Я пытаюсь автоматизировать некоторую процедуру, которая состоит в некоторой ссылке, щелкнув в сети, а затем через апплет, поэтому я должен отправить некоторые HTTPRequests через Java, пока не получаю HTML-код с тегом, из которого, через JSoup я извлекаю все параметры и базу кода и т. д. Поскольку я также хочу запустить апплет, я загружаю класс апплета с помощью ClassLoader, я устанавливаю настраиваемый заглушку, который может предоставить параметры, которые я извлек ранее.

Дело в том, что этот апплет имеет некоторое взаимодействие с браузером, поэтому в какой-то момент он делает JSObject.getWindow (апплет), чтобы получить документ и сделать js-вызовы, и вот где я застрял. Я понимаю, что мне нужно предоставить AppletContext, который должен внедрить JSContext и быть в состоянии предоставить этому JSObject, что это окно, которое браузер предоставит ему. Но можно ли издеваться над этим?

+0

* "Но можно издеваться такую ​​вещь?" * Я * считается * это для [Appleteer] (http://pscode.org/appleteer/), используя 'ScriptEngine' - но на самом деле никогда не пытались это сделать. Я предполагаю, что было бы немало усилий, чтобы довести его до такой степени, что он может загружать и интерпретировать сценарий, написанный на странице, поскольку нам нужно эмулировать объект JS 'document'. Чтобы заставить его работать с огромным разнообразием современных скриптов и API-интерфейсов, было бы еще труднее. Что такое страница (URL)? Что делают скрипты? –

+0

@AndrewThompson Я бы хотел дать вам URL-адрес страницы, но это старинная система, которая работает только в Интранете компании. Скрипты и апплет в основном делают некоторые проверки в браузере, системе os и антивирусе, но в конце концов он создает и добавляет cookie. То, что я пытаюсь сделать, - это подражать некоторому поведению, чтобы получить полученный файл cookie, таким образом, я смог бы автоматизировать процесс. –

ответ

0

Существует подлый трюк, первый создать interface, который расширяет AppletContext и JSContext

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); 
+0

Amm, извините, я думаю, что я ошибался, сказал я, но я думаю, что это было неправильное слово, потому что я хотел бы получить именно этот jsObject, возможно, это было возможно созданный из источника html или реализующий его сам, как AppletStub (но не знаю, как должны быть эти классы) или что-то еще. Опять же, я сожалею о своей плохой формулировке вопроса. –