[ptt-users] TestMaker: "Error getting page String index out of
range"
Olivier Dony
olivier.dony at denali.be
Fri Sep 28 00:26:38 PDT 2007
On Sep 27, 2007, at 10:47 PM, Lars Huttar wrote:
> What I'm trying to get to work right now is this.
> I have a TestGen4Web unit test with the following action:
> <action type="click" refresh="true" step="2">
> <xpath><![CDATA[*/a[@href="proof/summary-by-continent"]]]
> ></xpath>
> <value><![CDATA[]]></value>
> </action>
>
> When the test runs, I get the following output in Local TestNode
> Output:
>> Step 2: (click)
>> Executing: click
>> Error getting page String index out of range: -5
>> Got page: Ethnologue Publishing Home [which is the old page, not
>> the page I'm clicking on the link for]
> So somehow, this action is failing because, as it seems, the
> [@href="..."] predicate is failing via a string index out of range.
It seems you've run into a TestMaker bug. This occurs when the
TestMaker engine attempts to convert the "pseudo-XPath" from
TestGen4Web into the real XPath needed by the test engine. This fails
because you predicate contains a forward slash character '/', and
TestMaker is splitting the expression on '/' to analyze the XPath.
So it tries to handle separately */a[@href="proof and then summary-by-
continent"], which leads to the exception you've seen.
If any of the developers read this thread, thank you for creating a
bug report for this.
Maybe you can work around this issue by using "positional" XPath to
find the element in the page structure.
For example: */FORM[2]/P[1]/A[4]
As a general rule, your life will be much more easier with TestMaker
+ TestGen4Web (and other test tools) if you can have a unique ID
attribute on all elements you need to use in your tests: links, form
fields, buttons, etc.
> Initially when I generated the unit test using TestGen4Web, the
> <xpath> was:
> <xpath><![CDATA[*/A[@CDATA="Summary by
> area"]]]></xpath>
> which resulted in the output
>> Executing: click
>> oldXpath */A[@CDATA="Summary byarea"]: newXpath "//a[string()
>> ="Summary byarea"]"
>> Elem null
>> Error getting page null
>
> So it looked like that was failing because the CDATA containing a
> carriage return was not working as a selector.
> That's why I changed the predicate to use [@href="..."].
You're right, and this is another annoying issue. TestMaker converts
this pseudo-predicate "@cdata" into "@string()=", but this does not
work well with link label, due to different whitespace issues. Maybe
if something like contains() was used to construct the real XPath it
would work more often.
> The "String index out of range" messages seems to be a Python error.
It is actually the Java exception message occuring within
com.pushtotest.testmaker.XSTest.client.TestGenForWeb.normalizeXPath()
when it tries to convert the pseudo-XPath.
> I'm wondering whether this <xpath> stuff is really XPath, or just a
> semblance thereof. I haven't been able to find reference
> documentation for it.
> For example @CDATA doesn't seem to be real XPath, and then there's
> the question of whether HTML elements like A are case-sensitive.
Exactly. The "XPath" locators from TG4W are not really XPath, which
is why TestMaker needs to do the conversion on-the-fly.
I don't know if there is any documentation about this, but maybe this
will interest you:
http://cake.pushtotest.com/pipermail/users/2007-September/003415.html
> I guess this is a TestGen4Web issue, but it seems to be obstructing
> use of TM, so maybe that makes it of concern to TM.
>
> Any help is appreciated.
I hope this helps.
--
Olivier Dony,
Denali s.a., "Bridging the gap between Business and IT"
Rue de Clairvaux 8, B-1348 Louvain-la-Neuve, Belgium
Office: +32 10 43 99 51 Fax: +32 10 43 99 52
www.denali.be
Legal Notice: This message may contain confidential and/or privileged
information. If you are not the addressee or authorized to receive
this for the addressee, you must not use, copy, disclose or take any
action based on this message or any information herein. If you have
received this message by mistake, please advise the sender
immediately by return e-mail and delete this message from your
system. Thank you for your cooperation.
More information about the Users
mailing list