Hi Ralf,
Thanks heaps for that. It works perfectly and I even kind of understand it!
In the mean time I had got xPath working as well using //div[div='BOOKING
REFERENCE']/div[2]/div. I had a string() around it which seemed to mess it
up (although had been working OK I think in the past?). I also found that
DOTALL flag in QuickREx so have turned it off so I don't confuse myself in
future.
So wins on all counts - much appreciated!
regards,
John
On 3/15/07, Ralf Müller <[EMAIL PROTECTED]> wrote:
Hi!
I guess it is because the webtest regular expressions are greedy which
means that an expression like .+ tries to match as many characters as
possible and not just the next characters until the next \r\n as intended.
So if you change your expression to
<storeRegEx
description="Extract confirmation number i.e. PNR Ref"
text="BOOKING REFERENCE[^\r]+((\r\n)[^\r]+){2}\r\n[^>]*.([^<]+)"
group="3"
property="PNR_Ref" />
<echo message="PNR Ref of #{PNR_Ref}" />
it works fine.
I just checked QuickRex: I guess the main difference is the flag "DOTALL":
In dotall mode, the expression . matches any character, including a line
terminator.
So if you are not in dotall mode, your expression works fine, but
webtest "is in" dotall mode.
BTW: you should really try to use xpath :-)
Cheers,
Ralf
John and Pip wrote:
> Hi,
>
> I am using this regex:
>
> BOOKING REFERENCE.+((\r\n).+){2}\r\n[^>]*.([^<]+)
>
> to extract the booking reference (EAMPXH) out of this page (simplified):
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns=" http://www.w3.org/1999/xhtml" xml:lang="en"
> lang="en"><head>
> <title>Air New Zealand Bookings - Booking
Confirmation</title></head><body>
> <div id="main" style="display: block;">
> <div class="i20">
> <div class="panel">
> <div class="paneltext">BOOKING REFERENCE</div>
> </div>
> <div class="indentcell">
> <div class="errorstyle" style="font-family:
> Arial,Verdana,Helvetica,sans-serif; font-style: normal; font-variant:
> normal; font-weight: bold; font-size: 14px; line-height: normal;
> font-size-adjust: none; font-stretch: normal;">EAMPXH</div>
> </div>
> </body></html>
>
> When I put the regex into QuickREx in eclipse, it highlight up to the
> end of the reference, and when I click through the groups at the bottom
> it gives me this as the 3rd group.
>
> However, when I do this in my WebTest script:
>
> <storeRegEx
> description="Extract confirmation number i.e. PNR
Ref"
> text="BOOKING
> REFERENCE.+((\r\n).+){2}\r\n[^>]*.([^<]+)"
> group="3"
> property="PNR_Ref" />
> <echo message="PNR Ref of #{PNR_Ref}" />
>
>
> The result I get is just the ">" character.
>
> The results.xml shows:
>
> <step>
> <parameter name="description" value="Extract
> confirmation number i.e. PNR Ref"/>
> <parameter name="group" value="3"/>
> <parameter name="property" value="PNR_Ref"/>
> <parameter name="taskName" value="storeRegEx"/>
> <parameter name="text" value="BOOKING
> REFERENCE.+((\r\n).+){2}\r\n[^>]*.([^<]+)"/>
> <result>
> <completed duration="16"/>
> </result>
> </step>
> <step>
> <parameter name="message" value="PNR Ref of >"/>
> <parameter name="taskName" value="echo"/>
> <result>
> <completed duration="0"/>
> </result>
> </step>
>
> I turned logs to debug and the relevant output is:
>
> [storeRegEx] DEBUG (com.canoo.webtest.reporting.StepExecutionListener) -
> isToIgnore: [EMAIL PROTECTED], main
> [storeRegEx] DEBUG (com.canoo.webtest.reporting.StepResult) - In
> retrieveNestedText
> [storeRegEx] INFO (com.canoo.webtest.steps.Step) - >>>> Start Step:
> storeRegEx "Extract confirmation number i.e. PNR Ref" (8/10)
> [storeRegEx] DEBUG (com.canoo.webtest.steps.Step) - Executing storeRegEx
> "Extract confirmation number i.e. PNR Ref" (8/10)
> [storeRegEx] DEBUG (com.gargoylesoftware.htmlunit.WebResponseImpl) - No
> charset specified in header, trying to guess it from content
> [storeRegEx] DEBUG (com.gargoylesoftware.htmlunit.WebResponseImpl) -
> Nothing guessed, supposing that it is ISO-8859-1
> [storeRegEx] DEBUG (com.canoo.webtest.steps.Step) - setWebtestProperty:
> PNR_Ref=> [null]
> [storeRegEx] DEBUG ( com.canoo.webtest.steps.Step) - Finished storeRegEx
> "Extract confirmation number i.e. PNR Ref" (8/10)
> [storeRegEx] DEBUG (com.canoo.webtest.steps.Step) - Completed Step:
> storeRegEx "Extract confirmation number i.e. PNR Ref" (8/10)
> [storeRegEx] DEBUG (com.canoo.webtest.steps.Step) - Step didn't produce
> results, no need to notifying listeners
> [storeRegEx] DEBUG (com.canoo.webtest.steps.Step) - <<<< Successful
> Step: storeRegEx "Extract confirmation number i.e. PNR Ref" (8/10)
>
> I've spent a good few hours trying things with no success so I'd be
> grateful if anyone could advise me on what to do as I'm starting to look
> pretty stupid here at work!
>
> Incidentally, the response from the invoke saved during the test is
> identical to the input file.
>
> Please don't suggest using storeXPath as an alternative as the reason I
> turned to storeRegEx was because of problems with storeXPath - I'll post
> that separately!
>
> I am using version R_1498
>
> regards,
> John
_______________________________________________
WebTest mailing list
[email protected]
http://lists.canoo.com/mailman/listinfo/webtest