views:

129

answers:

3

Hello. I'm using htmlunit to test some pages and I'd like to know how can I execute some javascript code in the context of the current page. I'm aware that the docs say I'd better emulate the behavior of a user on a page, but it isn't working this way :( (I have a div which has an onclick property, I call its click method but nothing happens). So I've made some googling and tried:

JavaScriptEngine jse = webClient.getJavaScriptEngine();
jse.execute(page, what here?);

Seems like I have to instantiate the script first, but I've found no info on how to do it (right). Could someone share a code snippet showing how to make webclient instance execute the needed code?

+1  A: 

I don't know the JavaScriptEngine you're quoting and maybe it's not the answer you want, but this sounds like a perfect case for Selenium IDE.

Selenium IDE is a Firefox add-on that records clicks, typing, and other actions to make a test, which you can play back in the browser.

Pekka
I also highly recommend Selenium RC
slebetman
+1  A: 

You need to call executeJavaScript() on the page, not on webClient.

Example:

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
webClient.setJavaScriptEnabled(true);
HtmlPage page = webClient.getPage("http://www.google.com/ncr");
ScriptResult scriptResult = page.executeJavaScript("document.title");
System.out.println(scriptResult.getJavaScriptResult());

prints "Google". (I'm sure you'll have some more exciting code to put in there.)

Mirko Nasato
A: 

In TestPlan using the HTMLUnit backend the google example is:

GotoURL http://www.google.com/ncr
set %Title% as evalJavaScript document.title
Notice %Title%
edA-qa mort-ora-y