ReferenceError while accessing javascript method, external to current page - not defined

2,040 views
Skip to first unread message

Vasko

unread,
Nov 15, 2009, 8:39:58 PM11/15/09
to webdriver, vic...@gmail.com
Hi all,
Using HtmlUnitDriver we are trying to login to a site (for now I
prefer not to mention the site's name). I load the site's main page
via
driver.get(<url>);

enable javascript via
driver.setJavascriptEnabled(true);

perform some DOM element initialization and then "click" the login
button on the site:
WebElement loginButton = driver.findElementById("btnLogin");
loginButton.click();

and upon running this code I get:
ReferenceError: "<loginMethod_name>" is not defined. (javascript
url#165)

The login button html element on the site has the following structure:
<a id="btnLogin" class="ImgBtn" href="javascript:<loginMethod_name>
()">

The site's home page that I'm loading in the beginning, contains
several <script> tags with their "src" attributes pointing to external
javascript files.

As I can't find the definition of <loginMethod_name> withing the html
source code for this home page, I assume it is in one of those
external javascript files

So my question to you is: How do I access javascript methods, defined
in external .js files, from the context of the currently loaded html
page?
In other words, if the loaded page (http://www.somepage.com) contains
<script language="javascript" src="somefile.js></script> and
somefile.js defines the method aMethod, how can I make the following
code work:

driver = new HtmlUnitDriver();
driver.get("http://www.somepage.com");
driver.executeScript("aMethod();", new Object[] {});

Please bear in mind that we need to use HtmlUnitDriver (not any
browser-specific implementation)

Stay cool,
Vasko

Marc Guillemot

unread,
Nov 16, 2009, 3:12:58 AM11/16/09
to webd...@googlegroups.com
Hi,

which browser do you simulate with HtmlUnit? Does the same code work in
the "real" browser?

You don't have to do anything special to load functions defined in
external scripts. Perhaps is this function not defined at page load but
in the background (with XHR, setInterval or setTimeout) and your test is
just too fast.

An other possibility is that you just see a consequence of an error that
occurred earlier as the HtmlUnitDriver silently dismiss all kinds of
errors (and bugs) occurring in HtmlUnit.

Cheers,
Marc.

Vasko a écrit :

Vasko

unread,
Nov 16, 2009, 4:25:36 AM11/16/09
to webdriver
Hi Marc,
Thanks for your response

Our application is supposed to work for IE, Firefox and Chrome, hence
the choice of HtmlUnitDriver.

"Does the same code work in the "real" browser? "
I don't understand what you mean to say by this, could you please
clarify a bit. From what I get, HtmlUnitDriver is but a wrapper around
the "real"(?) browser, so if my code fails to work(how to test?) in
the "real" browser, then it would no doubt fail with HtmlUnitDriver as
well.

"An other possibility is that you just see a consequence of an error
that
occurred earlier as the HtmlUnitDriver silently dismiss all kinds of
errors (and bugs) occurring in HtmlUnit. "

In order to make things a bit clearer, I will copy the exact code,
that's executing (excluding any real page or login data):

HtmlUnitDriver driver = new HtmlUnitDriver();
driver.get("<page_name>");
driver.setJavascriptEnabled(true);
driver.executeScript("document.getElementById(\"inLogin\").value =
\"<username>\"", new Object[] {});
driver.executeScript("document.getElementById(\"inPassword\").value =
\"<password>\"", new Object[] {});
WebElement loginButton = driver.findElementById("btnLogin");
loginButton.click();

That, together with some html code from the web page:
<input id="inLogin" type="text" onfocus="ui_doFocusLogin()"
onblur="ui_doBlurLogin()">
<input id="inPassword" type="password" onkeypress="ui_doCheckEnterPress
(event)" onfocus="ui_doFocusPass()" onblur="ui_doBlurPass()">
<a id="btnLogin" class="ImgBtn" href="javascript:ui_DoLogin()">Go</a>

Is there a way of telling HtmlUnit to throw any error/exception it
encounters back to my code?

One more thing that I forgot to mention - the web page contains
dynamically loaded generated javascript - such as %5.js. Could that be
an issue?

Vasko

unread,
Nov 16, 2009, 5:36:55 AM11/16/09
to webdriver
The same code that I copied above works fine if I replace

HtmlUnitDriver driver = new HtmlUnitDriver();
, with
FirefoxDriver driver = new FirefoxDriver();

Using Simon's words from the presentation about actual and perceived
safety, if I may:
The FirefoxDriver gives perceived safety - I can see the username and
password fields filled on the page, the login button clicked and the
new page loading now with the logout button on it
It also gives some actual safety - I check the logout button from the
new page via getElementById, and it's there

Neither of the two is experienced with HtmlUnitDriver (in this case of
course, I'm not speaking in general)

"Perhaps is this function not defined at page load but
in the background (with XHR, setInterval or setTimeout) and your test
is
just too fast. "
Additionally, I tried Thread.sleep(10000) right before invoking
loginButton.click() with (HtmlUnitDriver) and it had no effect.
On the other hand, when testing agaist FirefoxDriver, the code works
both with and without this call to Thread.sleep(10000)

I hope these scenarios will help you better understand the issue and
give some hints..

All the best,
Vasko

Marc Guillemot

unread,
Nov 16, 2009, 6:25:57 AM11/16/09
to webd...@googlegroups.com
Hi Vasko,

HtmlUnit simulates a browser (currently 4 possibilities: FF2, FF3, IE6,
IE7). This means that it tries to do exactly the same than the simulated
browser. It does it fairly well for a lot of things (including JS of
course)... but not for everything. The consequence is that you can
experiment failures in HtmlUnit that don't exist in "real" browsers. If
it is the case, please report them to HtmlUnit's project, problems are
often fixed quickly.

Side note: why do you use executeJavaScript to fill fields? What about
typing in these fields?

Currently the HtmlUnitDriver doesn't provide an option to make problems
discovered by HtmlUnit or the bugs in HtmlUnit visible to the caller.
You need to subclass the HtmlUnitDriver and to modify the different
methods that catch exceptions there :-(

Concerning perceived safety: I don't think that the goal of your test
automation effort is to have someone looking at the screen all the time
while the tests are executing to give you the safety that you need ;-)

Without access to your site and with HtmlUnitDriver hiding the exception
that may occur, I can't provide more information on your problem :-(

Vasko

unread,
Nov 16, 2009, 2:23:36 PM11/16/09
to webdriver
Marc, thank you again for your involvement!

You're quite correct :) I just tried to present the situation from
another angle with the safety-stuff

"You need to subclass the HtmlUnitDriver and to modify the different
methods that catch exceptions there :-( "

I am on it. That below is the course I've taken, please direct me if
I'm off track:

1) Copy the entire HtmlUnitDriver source code to my subclass as a
starter (I noticed it is governed by the Apache Licence 2.0, so that's
allowed, right ?)
2) A method is suspicious of "hiding" an exception if it has empty
catch blocks (or such that don't throw exception back); or (?) if a
failed check of instanceof doesn't throw an exception
3) Discard all non-suspicious methods from child class
4) override all suspicious methods and if necessary redeclare private
variables and inner classes

This last point, I'm afraid, might change the HtmlUnitDriver
implementation, which brings a risk that my modification will not work
as intended, am I correct ?

I am not sure whether it is a good idea to post an example
"suspicious" method here, so I'll send it to you as a PM, if that is
all right with you.

All the best

Eran M.

unread,
Nov 18, 2009, 10:40:29 AM11/18/09
to webd...@googlegroups.com
You could just compile your own version of HtmlUnit with modification to the HtmlUnit code itself, that will always indicate an exception.
This may make it a bit easier as well to create a patch.

Eran

2009/11/16 Vasko <vassil....@gmail.com>

Marc Guillemot

unread,
Nov 18, 2009, 12:45:21 PM11/18/09
to webd...@googlegroups.com
You meant HtmlUnitDriver, isn't it?

Cheers,
Marc.

Eran M. a écrit :


> You could just compile your own version of HtmlUnit with modification to
> the HtmlUnit code itself, that will always indicate an exception.
> This may make it a bit easier as well to create a patch.
>
> Eran
>
> 2009/11/16 Vasko <vassil....@gmail.com

> <mailto:vassil....@gmail.com>>


>
>
> Marc, thank you again for your involvement!
>
> You're quite correct :) I just tried to present the situation from
> another angle with the safety-stuff
>
> "You need to subclass the HtmlUnitDriver and to modify the different
> methods that catch exceptions there :-( "
>
> I am on it. That below is the course I've taken, please direct me if
> I'm off track:
>
> 1) Copy the entire HtmlUnitDriver source code to my subclass as a
> starter (I noticed it is governed by the Apache Licence 2.0, so that's
> allowed, right ?)
> 2) A method is suspicious of "hiding" an exception if it has empty
> catch blocks (or such that don't throw exception back); or (?) if a
> failed check of instanceof doesn't throw an exception
> 3) Discard all non-suspicious methods from child class
> 4) override all suspicious methods and if necessary redeclare private
> variables and inner classes
>
> This last point, I'm afraid, might change the HtmlUnitDriver
> implementation, which brings a risk that my modification will not work
> as intended, am I correct ?
>
> I am not sure whether it is a good idea to post an example
> "suspicious" method here, so I'll send it to you as a PM, if that is
> all right with you.
>
> All the best
>
> On 16 Ноем, 13:25, Marc Guillemot <mguille...@yahoo.fr

Eran M.

unread,
Nov 18, 2009, 1:30:34 PM11/18/09
to webd...@googlegroups.com
Yes.
For a moment there I wasn't sure if the problem was within HtmlUnit or with HtmlUnitDriver. 
Either way, it may be simpler to do the changes in the code than creating an additional class.

Eran

2009/11/18 Marc Guillemot <mguil...@yahoo.fr>

Simon Stewart

unread,
Nov 19, 2009, 7:03:29 AM11/19/09
to webd...@googlegroups.com
Hi Vasko,

If you're loading the page and _then_ calling "setJavascriptEnabled"
you're going to see some odd behaviour (because, I suspect that
HtmlUnit doesn't go back and parse any script headers)

It's better to call "setJavascriptEnabled" before loading the page.

Regards,

Simon

Eran M.

unread,
Nov 19, 2009, 2:53:58 PM11/19/09
to webd...@googlegroups.com
If you pass 'true' to HtmlUnitDriver's constructor, Javascript will be enabled from the start.

Eran

2009/11/19 Simon Stewart <simon.m...@gmail.com>

Vasko

unread,
Nov 20, 2009, 12:41:21 PM11/20/09
to webdriver
Thanks Simon and Eran for the tips. Calling setJavascriptEnabled(true)
prior to loading the page does produce a different result. This time I
get:

org.openqa.selenium.WebDriverException:
com.gargoylesoftware.htmlunit.ScriptException: illegal character
(https://www.wbx.com/UI/_Common/JS/Common.js?1.0.1.34323#1)
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1',
java.version: '1.6.0_11'
Driver info: driver.version: htmlunit
at org.openqa.selenium.htmlunit.HtmlUnitDriver.get
(HtmlUnitDriver.java:229)
at org.openqa.selenium.htmlunit.HtmlUnitDriver.get
(HtmlUnitDriver.java:212)
<.... my code here - the executed line is
driver.get("https://www.wbx.com");
.....>
Caused by: com.gargoylesoftware.htmlunit.ScriptException: illegal
character (https://www.wbx.com/UI/_Common/JS/Common.js?1.0.1.34323#1)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine
$HtmlUnitContextAction.run(JavaScriptEngine.java:534)
at net.sourceforge.htmlunit.corejs.javascript.Context.call
(Context.java:515)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call
(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.compile
(JavaScriptEngine.java:389)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadJavaScriptFromUrl
(HtmlPage.java:1143)
at
com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile
(HtmlPage.java:1034)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded
(HtmlScript.java:359)
at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute
(HtmlScript.java:213)
at
com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage
(HtmlScript.java:239)
at com.gargoylesoftware.htmlunit.html.HTMLParser
$HtmlUnitDOMBuilder.endElement(HTMLParser.java:595)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown
Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser
$HtmlUnitDOMBuilder.endElement(HTMLParser.java:549)
at org.cyberneko.html.HTMLTagBalancer.callEndElement
(HTMLTagBalancer.java:1025)
at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:
927)
at org.cyberneko.html.filters.DefaultFilter.endElement
(DefaultFilter.java:206)
at org.cyberneko.html.filters.NamespaceBinder.endElement
(NamespaceBinder.java:329)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement
(HTMLScanner.java:3041)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan
(HTMLScanner.java:1993)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:910)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:
499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:
452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser
$HtmlUnitDOMBuilder.parse(HTMLParser.java:798)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parse
(HTMLParser.java:278)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage
(DefaultPageCreator.java:127)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage
(DefaultPageCreator.java:101)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto
(WebClient.java:442)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:
329)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:
386)
at org.openqa.selenium.htmlunit.HtmlUnitDriver.get
(HtmlUnitDriver.java:223)
... 4 more
Caused by:
net.sourceforge.htmlunit.corejs.javascript.EvaluatorException: illegal
character (https://www.wbx.com/UI/_Common/JS/Common.js?1.0.1.34323#1)
at com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter.error
(StrictErrorReporter.java:75)
at net.sourceforge.htmlunit.corejs.javascript.Parser.addError
(Parser.java:146)
at net.sourceforge.htmlunit.corejs.javascript.TokenStream.getToken
(TokenStream.java:825)
at net.sourceforge.htmlunit.corejs.javascript.Parser.peekToken
(Parser.java:172)
at net.sourceforge.htmlunit.corejs.javascript.Parser.primaryExpr
(Parser.java:2408)
at net.sourceforge.htmlunit.corejs.javascript.Parser.memberExpr
(Parser.java:1955)
at net.sourceforge.htmlunit.corejs.javascript.Parser.unaryExpr
(Parser.java:1813)
at net.sourceforge.htmlunit.corejs.javascript.Parser.mulExpr
(Parser.java:1742)
at net.sourceforge.htmlunit.corejs.javascript.Parser.addExpr
(Parser.java:1723)
at net.sourceforge.htmlunit.corejs.javascript.Parser.shiftExpr
(Parser.java:1703)
at net.sourceforge.htmlunit.corejs.javascript.Parser.relExpr
(Parser.java:1677)
at net.sourceforge.htmlunit.corejs.javascript.Parser.eqExpr
(Parser.java:1633)
at net.sourceforge.htmlunit.corejs.javascript.Parser.bitAndExpr
(Parser.java:1622)
at net.sourceforge.htmlunit.corejs.javascript.Parser.bitXorExpr
(Parser.java:1611)
at net.sourceforge.htmlunit.corejs.javascript.Parser.bitOrExpr
(Parser.java:1600)
at net.sourceforge.htmlunit.corejs.javascript.Parser.andExpr
(Parser.java:1588)
at net.sourceforge.htmlunit.corejs.javascript.Parser.orExpr
(Parser.java:1576)
at net.sourceforge.htmlunit.corejs.javascript.Parser.condExpr
(Parser.java:1559)
at net.sourceforge.htmlunit.corejs.javascript.Parser.assignExpr
(Parser.java:1544)
at net.sourceforge.htmlunit.corejs.javascript.Parser.expr(Parser.java:
1523)
at net.sourceforge.htmlunit.corejs.javascript.Parser.statementHelper
(Parser.java:1202)
at net.sourceforge.htmlunit.corejs.javascript.Parser.statement
(Parser.java:707)
at net.sourceforge.htmlunit.corejs.javascript.Parser.parse
(Parser.java:401)
at net.sourceforge.htmlunit.corejs.javascript.Parser.parse
(Parser.java:338)
at net.sourceforge.htmlunit.corejs.javascript.Context.compileImpl
(Context.java:2368)
at net.sourceforge.htmlunit.corejs.javascript.Context.compileString
(Context.java:1359)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory
$TimeoutContext.compileString(HtmlUnitContextFactory.java:177)
at net.sourceforge.htmlunit.corejs.javascript.Context.compileString
(Context.java:1348)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$4.doRun
(JavaScriptEngine.java:380)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine
$HtmlUnitContextAction.run(JavaScriptEngine.java:528)
... 33 more

I will appreciate any ideas on how to fix this

Simon Stewart

unread,
Nov 20, 2009, 1:56:30 PM11/20/09
to webd...@googlegroups.com
It looks like HtmlUnit is choking on some of the Javascript you're
executing. Maybe Marc has some ideas?

Simon

Marc Guillemot

unread,
Nov 23, 2009, 2:42:49 AM11/23/09
to webd...@googlegroups.com
Hi,

this is definitely a bug in HtmlUnit... or to be more precise: it was.
Indeed I strongly believe that it has already been fixed. You can try to
pick an HtmlUnit-2.7-SNAPSHOT to use it in place of HtmlUnit-2.6 (take
care of the dependencies). As far as I know, reading and setting cookies
won't work as we have incompatible changes there.

Cheers,
Marc.


Simon Stewart a écrit :

Simon Stewart

unread,
Nov 23, 2009, 5:22:03 AM11/23/09
to webd...@googlegroups.com
As an aside, any plans for a 2.7 release of HtmlUnit? Also, is anyone
keen for a fresh release of webdriver?

Simon

PerfectStorm

unread,
Nov 23, 2009, 10:23:16 AM11/23/09
to webdriver
Also up for a new release

On Nov 23, 5:22 am, Simon Stewart <simon.m.stew...@gmail.com> wrote:
> As an aside, any plans for a 2.7 release of HtmlUnit? Also, is anyone
> keen for a fresh release of webdriver?
>
> Simon
>
>
>
> On Mon, Nov 23, 2009 at 7:42 AM, Marc Guillemot <mguille...@yahoo.fr> wrote:
>
> > Hi,
>
> > this is definitely a bug in HtmlUnit... or to be more precise: it was.
> > Indeed I strongly believe that it has already been fixed. You can try to
> > pick an HtmlUnit-2.7-SNAPSHOT to use it in place of HtmlUnit-2.6 (take
> > care of the dependencies). As far as I know, reading and setting cookies
> > won't work as we have incompatible changes there.
>
> > Cheers,
> > Marc.
>
> > Simon Stewart a écrit :
> >> It looks like HtmlUnit is choking on some of the Javascript you're
> >> executing. Maybe Marc has some ideas?
>
> >> Simon
>
> >>> I will appreciate any ideas on how to fix this- Hide quoted text -
>
> - Show quoted text -

Marc Guillemot

unread,
Nov 23, 2009, 11:33:01 AM11/23/09
to webd...@googlegroups.com
Hi,

we hope to release 2.7 this year.

Simon Stewart

unread,
Nov 23, 2009, 12:31:51 PM11/23/09
to webd...@googlegroups.com
I keep on forgetting how close that is :)

Simon

Vasko

unread,
Nov 24, 2009, 9:48:51 AM11/24/09
to webdriver
Guys, you are helping a lot, thank you.
I've got the HtmlUnit-2.7-SNAPSHOT from http://build.canoo.com/htmlunit/artifacts/
- the zip "with dependencies"

Now the driver.get() seems to be working fine, I get an error when
trying passField.sendKeys(<password>)
Here's some of the code that's executing:

1 HtmlUnitWebElement passField = (HtmlUnitWebElement)
driver.findElementById("inPassword");
2 passField.clear();
3 passField.sendKeys(<password>);

where I use the following two import classes:

import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.htmlunit.HtmlUnitWebElement;

The error I got was:

java.lang.StringIndexOutOfBoundsException: String index out of range:
8
at java.lang.String.substring(String.java:1935)
at com.gargoylesoftware.htmlunit.html.DoTypeProcessor.doType
(DoTypeProcessor.java:40)
at com.gargoylesoftware.htmlunit.html.HtmlPasswordInput.doType
(HtmlPasswordInput.java:130)
at com.gargoylesoftware.htmlunit.html.HtmlElement.type
(HtmlElement.java:477)
at com.gargoylesoftware.htmlunit.html.HtmlElement.type
(HtmlElement.java:444)
at com.gargoylesoftware.htmlunit.html.HtmlElement.type
(HtmlElement.java:413)
at org.openqa.selenium.htmlunit.HtmlUnitWebElement.sendKeys
(HtmlUnitWebElement.java:218)
at
org.openqa.selenium.htmlunit.RenderedHtmlUnitDriverWebElement.sendKeys
(RenderedHtmlUnitDriverWebElement.java:49)
at <the source code above; line 3>

I did some debugging and got to the following...

The code being executed in HtmlPasswordInput.doType(line 130 above)
that is causing this error is:
doTypeProcessor_.doType(getValueAttribute(), getSelectionStart(),
getSelectionEnd(),
c, shiftKey, ctrlKey, altKey);

Upon execution, getValueAttribute() returns "" (which is expected,
I've called passField.clear() just before sendKeys()).
However, getSelectionStart() returns 8 ?? I would expect at this point
that it is 0 (since the field is empty and there is no text to select)

I searched a bit why this happens and it turned out that the
com.gargoylesoftware.htmlunit.html.impl.SelectionDelegate member of
HtmlPasswordInput
is responsible for managing the "selection" in the html password input
field.

After some more searching, I believe I might have found a bug in
HtmlUnit.. if you would direct me to post it elsewhere :?
It seems com.gargoylesoftware.htmlunit.html.HtmlTextInput overrides
setAttributeNS() from com.gargoylesoftware.htmlunit.html.DomElement
and in it calls
setSelectionStart(attributeValue.length());
setSelectionEnd(attributeValue.length()); to "refresh"
the selection.
In contrast, com.gargoylesoftware.htmlunit.html.HtmlPasswordInput
doesn't override this method and as a result, calling clear() on its
HtmlUnitWebElement wrapper
doesn't "refresh" the selection, thus the error that I copied in the
beginning of my post. (that's why userField.sendKeys() works and
passField.sendKeys() doesn't)

I found that HtmlPasswordInput.select() will "refresh" the selection
for me, but I don't have access to the HtmlPasswordInput element
through HtmlUnitWebElement. So I went on to copy the sources of
HtmlUnitDriver, HtmlUnitWebElement and RenderedHtmlUnitWebElement and
use them instead to gain access to this protected field.

Sorry for making you read so much.. :) My question is, where can I
find the latest version of the source code of these three classes?
Because there seem to be some incompatibility between the sources I
have of webdriver and the HtmlUnit-2.7-SNAPSHOT....

All the best,
Vasko

Marc Guillemot

unread,
Nov 24, 2009, 9:53:09 AM11/24/09
to webd...@googlegroups.com
Hi Vasko,

I'm sorry that you had to debug this as the problem has already been
fixed in HtmlUnit... but no new snapshot has been produced since this
time due to a problem on the build server.
If you check out HtmlUnit from its SVN, you can build the jar by yourself.

Cheers,
Marc.

Vasko a écrit :
Reply all
Reply to author
Forward
0 new messages