[Webtest] OOM Error on some pages with JavaScript

Matt Raible webtest@lists.canoo.com
Wed, 11 Jan 2006 10:05:59 -0700


I've recently upgraded from build574 to build1108.  I had to pull the
latest CVS fro htmlunit to get Prototype (the JavaScript library)
support.  Now I'm experiencing a strange issue with some JSF pages I'm
testing.  Basically, webtest just hangs when it gets to the page, and
then runs out of memory.

EditUser:
  [webtest] 2006-01-11 10:00:12,867 ERROR com.canoo.webtest.steps.Step - Ca=
nno
handle unexpected exception in step ClickLink at C:\Source\appfuse-jsf\test=
\we
web-tests.xml:74:  with (label=3D"Edit Profile", description=3D"click Edit =
Profile
ink", stepType=3D"clicklink")
  [webtest] java.lang.OutOfMemoryError: Java heap space

BUILD FAILED
C:\Source\appfuse-jsf\build.xml:533: The following error occurred while exe=
cut
g this line:
C:\Source\appfuse-jsf\test\web\web-tests.xml:70: Test failed.
Exception raised: com.canoo.webtest.engine.StepExecutionException: Unexpect=
ed
ception caught: java.lang.OutOfMemoryError: Java heap space, Step: ClickLin=
k a
C:\Source\appfuse-jsf\test\web\web-tests.xml:74:  with (label=3D"Edit Profi=
le",
scription=3D"click Edit Profile link", stepType=3D"clicklink")com.canoo.web=
test.en
ne.StepExecutionException: Unexpected exception caught: java.lang.OutOfMemo=
ryE
or: Java heap space, Step: ClickLink at C:\Source\appfuse-jsf\test\web\web-=
tes
.xml:74:  with (label=3D"Edit Profile", description=3D"click Edit Profile l=
ink", s
pType=3D"clicklink")
        at com.canoo.webtest.steps.Step.handleUnexpectedException(Step.java=
:56

        at com.canoo.webtest.steps.AbstractBrowserAction.handleUnexpectedEx=
cep
on(AbstractBrowserAction.java:106)
        at com.canoo.webtest.steps.request.TargetHelper.protectedGoto(Targe=
tHe
er.java:108)
        at com.canoo.webtest.steps.request.AbstractTargetAction.gotoTarget(=
Abs
actTargetAction.java:106)
        at com.canoo.webtest.steps.request.AbstractTargetAction.doExecute(A=
bst
ctTargetAction.java:78)
        at com.canoo.webtest.steps.Step.execute(Step.java:143)
        at com.canoo.webtest.engine.Engine.executeSteps(Engine.java:28)
        at com.canoo.webtest.ant.WebtestTask.execute(WebtestTask.java:79)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:=
275
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1=
216
        at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(S=
ing
CheckExecutor.java:37)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:=
275
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1=
216
        at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(Defau=
ltE
cutor.java:40)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
        at org.apache.tools.ant.Main.runBuild(Main.java:668)
        at org.apache.tools.ant.Main.startAnt(Main.java:187)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)


Total time: 1 minute 1 second
$

Here's my test:

    <!-- Verify the edit user screen displays without errors -->
    <target name=3D"EditUser"
        description=3D"Tests selecting the 'Edit Profile' forward">
        <webtest name=3D"editUser">
            &config;
            <steps>
                &login;
                <clicklink description=3D"click Edit Profile link"
label=3D"${menu.user}"/>
                <verifytitle description=3D"we should see the user profile =
title"
                    text=3D"${webapp.prefix}${userProfile.title}"/>
            </steps>
        </webtest>
    </target>

Pretty simple stuff.  If I remove verifyTitle, it still happens.=20
Unfortunately, since I'm using JSF, I have no control over the
JavaScript that's generated from the following:

<h:commandLink value=3D"#{text['menu.user']}" action=3D"#{userForm.edit}"/>

I noticed this error on another page too, but changing the JavaScript
fixed the problem:

 <script type=3D"text/javascript">
-    var f =3D document.forms['passwordForm'];
-    f.elements['passwordForm:_link_hidden_'].value=3D'passwordForm:execute=
';
-    f.elements['username'].value=3D'<c:out value=3D"${param.username}"/>';
-    f.submit();
+    function submitForm() {
+        var f =3D document.forms['passwordForm'];
+        f.elements['passwordForm:_link_hidden_'].value=3D'passwordForm:exe=
cute';
+        f.elements['username'].value=3D'<c:out value=3D"${param.username}"=
/>';
+        f.submit();
+    }
+    window.onload=3DsubmitForm;
 </script>

Here's the generated JavaScript - which used to work fine with
build574 and JavaScript enabled.

<ul class=3D"glassList">
    <li>

        <a href=3D"#"
onclick=3D"clear_editUser();document.forms['editUser'].elements['editUser:_=
link_hidden_'].value=3D'editUser:_id0';if(document.forms['editUser'].onsubm=
it){document.forms['editUser'].onsubmit();}document.forms['editUser'].submi=
t();return
false;" id=3D"editUser:_id0">Edit Profile</a>
    </li>
    <li>
        <a href=3D"/appfuse-jsf/selectFile.html">Upload A File</a>
    </li>
</ul>

<input type=3D"hidden" name=3D"editUser_SUBMIT" value=3D"1"/><input
type=3D"hidden" name=3D"editUser:_link_hidden_"/><script
type=3D"text/javascript"><!--
function clear_editUser() {
  var f =3D document.forms['editUser'];
  f.elements['editUser:_link_hidden_'].value=3D'';
  f.target=3D'';
}
clear_editUser();
--></script>

Thanks,

Matt