[Webtest] FollowFrame
Torben Tretau
webtest@lists.canoo.com
Wed, 16 Oct 2002 14:50:15 +0200
Hi List,
getting new into WebTest I quickly hacked a FollowFrame element
as mentioned sometimes earlier from Dierk in a discussion here..
As I am new and surely I could misunderstood some things and made
wrong, I post my first hack here..
Perhaps someone who is more into it can give me feedback on it and
give me hints on what i could have done wrong..
------------------------- snip -------------------------------------------------
my add-on to the Target-class: (->creator: is it totally wrong placed here?)
...
public WebResponse gotoSubframe(TestContext context, String framename) throws IOException, MalformedURLException, SAXException {
WebResponse resp = null;
try {
installHtmlErrorHandlerIfNeeded(context);
logText(context, "-> gotoSubframe(by name): " + framename);
prepareConversation(context);
resp = context.getLastResponse().getSubframeContents(framename);
} catch (AuthorizationRequiredException are) {
throw new TestStepFailedError("Authorization required for page: " + framename, this);
} catch (HttpNotFoundException hnfe) {
throw new TestStepFailedError(getStepId(context) + ": Page not found: " + framename, this);
} finally {
removeHtmlErrorHandlerIfNeeded(context);
}
context.resetNextParameters();
context.setLastResponseForStep(resp, (Target) this);
return resp;
}
...
-----------------snap------------------------------------------------------------
my FollowFrame-class:
package com.canoo.webtest.steps;
import com.canoo.webtest.engine.TestContext;
import com.canoo.webtest.engine.TestStepSetupError;
import com.canoo.webtest.engine.TestStepFailedError;
import com.meterware.httpunit.WebLink;
import com.meterware.httpunit.WebResponse;
import org.xml.sax.SAXException;
import java.util.*;
public class FollowFrame extends Target
{
private String fName;
/**
* Constructor used for instance creation as nested element by ant
*/
public FollowFrame()
{
super();
}
protected void doExecute(TestContext context) throws Exception
{
super.doExecute(context);
String[] subFrames = context.getLastResponse().getFrameNames();
boolean foundFrame = false;
for (int i=0;i < subFrames.length; i++) {
if(subFrames[i].equals(getName()))
{
foundFrame = true;
}
}
if(!foundFrame)
throw new TestStepFailedError(getStepId(context) + " Frame not found with name: " + getName(), this);
verifyParameters();
gotoSubframe(context, getName());
}
private void verifyParameters()
{
if (fName == null)
{
throw new TestStepSetupError("Required parameter name not set!", this);
}
}
protected String getName()
{
return fName;
}
public void setName (String newName)
{
fName = newName;
}
public HashMap getParameterDictionary()
{
HashMap map = super.getParameterDictionary();
if (getName() != null)
{
map.put("name", getName());
}
return map;
}
protected void expandProperties()
{
super.expandProperties();
fName = expandDynamicProperties(fName);
}
}
----------------------------snap---------------------------------------------------
now a <followframe name="blub"/> works for me..
Looking forward for all feedback..
Bye,
Torben