[Webtest] How to compare two strings using XPATH?

Denis N. Antonioli webtest@lists.canoo.com
Wed, 16 Aug 2006 09:27:19 +0200


Hi

webtest understands xpath 1.0 <http://www.w3.org/TR/xpath>.
Compare is planend for xpath 2.

Best
	dna

On 15 ao=FBt 06, at 22:55, Koorosh Vakhshoori wrote:

> Hi folks,
>   My application has a sorting feature where it sorts a result set by
> product name alphabetically. I was looking at REPEAT and XPATH =20
> functions
> to test this feature. However, when it comes to comparing two =20
> string, I
> am having problems. I was looking at XPATH function list at:
>
> http://www.w3schools.com/xpath/xpath_functions.asp#string
>
> And noticed there is a function called 'compare'. Here is a snipple of
> my test script:
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> <storeXPath description=3D"Get first product"
>  xpath=3D"substring-before(//span[@class=3D'searchDetails'],' - ')"
>  property=3D"previousProduct"
> />
> <repeat count=3D"15" startCount=3D"2">
>  <storeXPath description=3D"Capture current product name"
>   xpath=3D"substring-before(//span[@class=3D'searchNumber' and
> .=3D'#{count}.']/../../td/span[@class=3D'searchDetails'],' - ')"
>   property=3D"currentProduct"
>  />
>  <verifyXPath description=3D"Compare previous against current product"
>   xpath=3D"compare(#{previousProduct},#{currentProduct}) &lt; 1"
>  />
>  <storeProperty description=3D"Save current product in previous =
product
> for next run"
>   name=3D"previousProduct"
>   value=3D"#{currentProduct}"
>  />
> </repeat>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20
> =3D=3D
> =3D=3D=3D=3D=3D=3D=3D
>
> However, when I tried using it I got the following error:
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20
> =3D=3D
> =3D=3D=3D=3D=3D=3D=3D
> Message
> Unexpected exception caught: org.jaxen.UnresolvableException: No Such
> Function compare
> Stacktrace
> com.canoo.webtest.engine.StepExecutionException: Unexpected exception
> caught: org.jaxen.UnresolvableException: No Such Function compare, =20
> Step:
> VerifyXPath at
> C:\eclipse-workspace\Search\user_test\usecases\Search=20
> \SimpleSearch4.xml:
> 155:  with (description=3D"Compare previous again current product",
> taskName=3D"verifyXPath", xpath=3D"compare(VERA,VERA)")
> 	at
> com.canoo.webtest.steps.Step.handleUnexpectedException(Step.java:457)
> 	at com.canoo.webtest.steps.Step.execute(Step.java:133)
> 	at org.apache.tools.ant.Task.perform(Task.java:364)
> 	at
> com.canoo.webtest.steps.StepUtil.performStanza(StepUtil.java:34)
> 	at
> com.canoo.webtest.steps.AbstractStepContainer.executeContainedStep=20
> (Abstr
> actStepContainer.java:150)
> 	at
> com.canoo.webtest.steps.control.RepeatStep.executeContainedSteps=20
> (RepeatS
> tep.java:167)
> 	at
> com.canoo.webtest.steps.control.RepeatStep.doExecute=20
> (RepeatStep.java:150
> )
> 	at com.canoo.webtest.steps.Step.execute(Step.java:130)
> 	at org.apache.tools.ant.Task.perform(Task.java:364)
> 	at
> com.canoo.webtest.ant.TestStepSequence.executeSteps=20
> (TestStepSequence.jav
> a:58)
> 	at
> com.canoo.webtest.ant.TestStepSequence.doExecute=20
> (TestStepSequence.java:3
> 9)
> 	at com.canoo.webtest.steps.Step.execute(Step.java:130)
> 	at org.apache.tools.ant.Task.perform(Task.java:364)
> 	at
> com.canoo.webtest.ant.WebtestTask.execute(WebtestTask.java:152)
> 	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:1216)
> 	at
> org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets=20
> (SingleChe
> ckExecutor.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:1216)
> 	at
> org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets=20
> (SingleChe
> ckExecutor.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.taskdefs.CallTarget.execute(CallTarget.java:107)
> 	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:1216)
> 	at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
> 	at
> org.apache.tools.ant.helper.DefaultExecutor.executeTargets=20
> (DefaultExecut
> or.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)
> Caused by: org.jaxen.UnresolvableException: No Such Function compare
> 	at
> org.jaxen.SimpleFunctionContext.getFunction=20
> (SimpleFunctionContext.java:1
> 27)
> 	at org.jaxen.ContextSupport.getFunction(ContextSupport.java:244)
> 	at org.jaxen.Context.getFunction(Context.java:198)
> 	at
> org.jaxen.expr.DefaultFunctionCallExpr.evaluate=20
> (DefaultFunctionCallExpr.
> java:172)
> 	at
> org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:102)
> 	at org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:680)
> 	at org.jaxen.BaseXPath.selectNodes(BaseXPath.java:219)
> 	at org.jaxen.BaseXPath.selectSingleNode(BaseXPath.java:240)
> 	at
> com.canoo.webtest.steps.verify.VerifyXPath.verifyXPath=20
> (VerifyXPath.java:
> 91)
> 	at
> com.canoo.webtest.steps.verify.VerifyXPath.doExecute=20
> (VerifyXPath.java:73
> )
> 	at com.canoo.webtest.steps.Step.execute(Step.java:130)
> 	... 41 more
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>
> Is there something I am doing wrong, or the function 'compare' is not
> supported?
>
> Thanks,
> Koorosh
> _______________________________________________
> WebTest mailing list
> WebTest@lists.canoo.com
> http://lists.canoo.com/mailman/listinfo/webtest

--=20
Beware of the man who works hard to learn something, learns it, and =20
finds
himself no wiser than before," Bokonon tells us.  "He is full of =20
murderous
resentment of people who are ignorant without having come by their
ignorance the hard way.
   - Kurt Vonnegut, "Cat's Cradle"