[Webtest] XPath: Absolut element location versus conditional branch

Ammann Kuno webtest@lists.canoo.com
Wed, 27 Nov 2002 10:59:52 +0100


This is a multi-part message in MIME format.

--------------InterScan_NT_MIME_Boundary
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_001_01C295FB.BAA75C66"

------_=_NextPart_001_01C295FB.BAA75C66
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

ciao z=E4me! ich bin daran eine tabelle mit unz=E4hligen zellen in =
mehreren zeilen fachlich zu kontrollieren. die zu pr=FCfende html seite =
sieht wie folgt aus:
<HTML><HEAD><TITLE>PFFireForm</TITLE>
</HEAD><BODY BGCOLOR=3D"#FFFFFF">
<table border=3D"0" width=3D"80%">
   ....
</table>
<table id=3Ddata>
  <tr>
    <td>C003</td>
    <td>C004</td>
    <td>C007</td>
    <td>C008</td>
    <td>C009</td>
    ....
</tr>
  <tr>
    <td>001</td>
    <td>CH</td>
    <td>CHF</td>
    <td></td>
    <td>|CHF|ASIA|equity|CS_GROUP_N</td>
    ....
  </tr>
  <tr>
    <td>001</td>
    <td>CH</td>
    <td>CHF</td>
    <td></td>
    <td>|CHF|ASIA|equity|CS_GROUP_N</td>=20
    ....
  </tr>
  <tr>
    <td>001</td>
    <td>CH</td>
    <td>EUR</td>
    <td></td>
    <td>CH365|EUR|ASIA|bond|DAILY365</td>=20
    ....
  </tr>
</table>
</body>
</html>
=20
dabei interessiert mich also nur die zweite tabelle und diese habe ich =
mit foldenden steps angefangen zu =FCberpr=FCfen (ich z=E4hle f=FChre =
auch einfache varianten auf, damit man sieht, wie ich mich an das ziel =
herantasten "wollte"). diese steps haben alle wie erwartet funktioniert:
=20
<verifytext stepid=3D"check ccy via table" text=3D"EUR">
 <table id=3D"data" row=3D"2" column=3D"2"/>
</verifytext>
<verifyxpath stepid=3D"check report table" xpath=3D"/html/body/table[2]" =
regex=3D"false"/>
<verifyxpath stepid=3D"check 2" xpath=3D"/html/body/table[2]/tr[2]" =
text=3D".*ASIA.*" regex=3D"true"/>
<verifyxpath stepid=3D"check 3" =
xpath=3D"/html/body/table[2]/tr[3]/td[3]" text=3D"EUR" regex=3D"false"/>
=20
der folgende step hat f=FCr mich =FCberraschenderweise auch funktioniert =
(ich h=E4tte erwartet, dass text=3D".*ASIA.*" n=F6tig ist):
<verifyxpath stepid=3D"check 4" xpath=3D"/html/body/table[2]/tr[3]" =
text=3D"ASIA" regex=3D"true"/>
=20
=20
mit den folgenen zwei steps wollte ich herausfinden, was er findet, bzw. =
warum der letzte step (vgl. unten) nicht gl=FCckt. als erstes wollte ich =
alle zeilen, welche eine zelle mit dem inhalt EUR haben. die =
ern=FCchternde meldung ist jedoch leider "...evaluates to: , expected =
value is: VV". das ist f=FCr mich nicht nachvollziehbar, hat er doch =
weiter oben im stepid=3Dcheck 3 best=E4tigt, dass eine zeile mit einem =
wert EUR gibt, n=E4mlich die 3 zeile, 3 zelle :-(
<verifyxpath stepid=3D"check 5" =
xpath=3D"/html/body/table[2]/tr[td=3DEUR]" text=3D"VV" regex=3D"false"/>
=20
=E4hnliches gilt bei folgendem step, welcher generell eine zeile mit =
einer zelle mit EUR sucht. auch dieser step liefert f=FCr mich nicht =
nachvollziehbar einen Failure, vgl. check 5.
<verifyxpath stepid=3D"check 6" xpath=3D"//tr[td=3DEUR]" text=3D"VV" =
regex=3D"false"/>
=20
ziel w=E4re der folgende check, welcher abh=E4ngig von einer =
identifizierenden zelle eine zeile lokalisiert, in der ich dann eine =
bestimmte zelle fachlich =FCberpr=FCfen kann (die identifzierende zelle, =
welche CH365 enth=E4lt sieht man oben nicht, man k=F6nnte in diesem =
beispiel jedoch auch EUR verwenden, da es nur eine zeile mit EUR gibt):
<verifyxpath stepid=3D"check C510 for bond daily365 " =
xpath=3D"/html/body/table/tr[td=3DCH365]/td[3]" text=3D"EUR" =
regex=3D"false"/>
=20
ich w=E4re froh, um hinweise, welche mich in die richtige richtung =
f=FChren k=F6nnen. oder gibt es andere m=F6glichkeiten? ich habe auch =
schon an regular expression checks gedacht, jedoch habe ich es nicht =
fertig gebracht eine regex expression zu formulieren, welche vor der =
n=E4chsten html zeile stoppt alla "CH365.*?EUR" jedoch darf dazwischen =
keine <tr> vorkommen -> "CH365[^tr]*?EUR" geht leider nicht, da dadurch =
generell alle t und r buchstaben ausgeschlossen werden (das f=FChrt =
leider dazu, dass er z.b. schon bei equity stoppt). man sollte explizit =
das wort 'tr' ausschliesen k=F6nnen.
vielen dank f=FCr eure unterst=FCtzung, mfg, kuno

------_=_NextPart_001_01C295FB.BAA75C66
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Message</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2600.0" name=3DGENERATOR></HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D389042409-27112002>ciao =
z=E4me! ich bin=20
daran eine tabelle mit unz=E4hligen zellen in mehreren zeilen fachlich =
zu=20
kontrollieren. die zu pr=FCfende html seite sieht wie folgt=20
aus:</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D389042409-27112002>&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;PFFireFor=
m&lt;/TITLE&gt;<BR>&lt;/HEAD&gt;&lt;BODY=20
BGCOLOR=3D"#FFFFFF"&gt;</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D389042409-27112002>&lt;table border=3D"0"=20
width=3D"80%"&gt;<BR>&nbsp;&nbsp; ....<BR>&lt;/table&gt;<BR>&lt;table=20
id=3Ddata&gt;<BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;C003&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;C004&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;C007&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;C008&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;C009&lt;/td&gt;</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D389042409-27112002>&nbsp;&nbsp;&nbsp;=20
....</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D389042409-27112002>&lt;/tr&gt;<BR>&nbsp; =
&lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;001&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;CH&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;CHF&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;|CHF|ASIA|equity|CS_GROUP_N&lt;/td&gt;</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D389042409-27112002>&nbsp;&nbsp;&nbsp;=20
....</SPAN></FONT></DIV>
<DIV><FONT><SPAN class=3D389042409-27112002><FONT face=3DArial =
size=3D2>&nbsp;=20
&lt;/tr&gt;<BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;001&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;CH&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;CHF&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;|CHF|ASIA|equity|CS_GROUP_N&lt;/td&gt;</FONT>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D389042409-27112002>&nbsp;&nbsp;&nbsp;=20
....</SPAN></FONT></DIV>
<DIV><FONT face=3DArial><FONT size=3D2><SPAN =
class=3D389042409-27112002>&nbsp;=20
&lt;/tr&gt;</SPAN><BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;001&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;CH&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;<SPAN=20
class=3D389042409-27112002>EUR</SPAN>&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp;=20
&lt;td&gt;CH365|EUR|ASIA|bond|DAILY365&lt;/td&gt;</FONT></FONT>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D389042409-27112002>&nbsp;&nbsp;&nbsp;=20
....</SPAN></FONT></DIV>
<DIV><FONT face=3DArial><FONT size=3D2><SPAN =
class=3D389042409-27112002>&nbsp;=20
&lt;/tr&gt;</SPAN><BR>&lt;/table&gt;</FONT></FONT></SPAN></FONT></DIV></D=
IV></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D389042409-27112002>&lt;/body&gt;<BR>&lt;/html&gt;</SPAN></FONT></=
DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D389042409-27112002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D389042409-27112002>dabei =
interessiert=20
mich also nur die zweite tabelle und diese habe ich mit foldenden steps=20
angefangen zu =FCberpr=FCfen (ich z=E4hle f=FChre auch einfache =
varianten auf, damit man=20
sieht, wie ich mich an das ziel herantasten "wollte"). diese steps haben =
alle=20
wie erwartet funktioniert:</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D389042409-27112002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D389042409-27112002>&lt;verifytext=20
stepid=3D"check ccy via table" text=3D"EUR"&gt;<BR>&nbsp;&lt;table =
id=3D"data" row=3D"2"=20
column=3D"2"/&gt;<BR>&lt;/verifytext&gt;</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D389042409-27112002>&lt;verifyxpath=20
stepid=3D"check report table" xpath=3D"/html/body/table[2]"=20
regex=3D"false"/&gt;<BR>&lt;verifyxpath stepid=3D"check 2"=20
xpath=3D"/html/body/table[2]/tr[2]" text=3D".*ASIA.*"=20
regex=3D"true"/&gt;<BR>&lt;verifyxpath stepid=3D"check 3"=20
xpath=3D"/html/body/table[2]/tr[3]/td[3]" text=3D"EUR"=20
regex=3D"false"/&gt;</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D389042409-27112002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D389042409-27112002>der =
folgende step=20
hat f=FCr mich =FCberraschenderweise auch funktioniert (ich h=E4tte =
erwartet, dass=20
text=3D".*ASIA.*" n=F6tig ist):</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D389042409-27112002>&lt;verifyxpath=20
stepid=3D"check 4" xpath=3D"/html/body/table[2]/tr[3]" text=3D"ASIA"=20
regex=3D"true"/&gt;</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D389042409-27112002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT><SPAN class=3D389042409-27112002>&nbsp;</DIV>
<DIV><SPAN class=3D389042409-27112002></SPAN><FONT face=3DArial =
size=3D2>m<SPAN=20
class=3D389042409-27112002>it den folgenen zwei steps wollte ich =
herausfinden, was=20
er findet, bzw. warum der letzte step (vgl. unten) nicht gl=FCckt. als =
erstes=20
wollte ich alle zeilen, welche eine zelle mit dem inhalt EUR haben. die=20
ern=FCchternde meldung ist jedoch leider "...evaluates to: , expected =
value is:=20
VV". das ist f=FCr mich nicht nachvollziehbar, hat er doch weiter oben =
im=20
stepid=3Dcheck 3 best=E4tigt, dass eine zeile mit einem wert EUR gibt, =
n=E4mlich die 3=20
zeile, 3 zelle :-(</SPAN><BR>&lt;verifyxpath stepid=3D"check 5"=20
xpath=3D"/html/body/table[2]/tr[td=3DEUR]" text=3D"VV" =
regex=3D"false"/&gt;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT><SPAN class=3D389042409-27112002></SPAN><FONT face=3DArial =
size=3D2>=E4<SPAN=20
class=3D389042409-27112002>hnliches gilt bei folgendem step, welcher =
generell eine=20
zeile mit einer zelle mit EUR sucht. auch dieser step liefert f=FCr mich =
nicht=20
nachvollziehbar einen Failure, vgl. check 5.</SPAN><BR>&lt;verifyxpath=20
stepid=3D"check 6" xpath=3D"//tr[td=3DEUR]" text=3D"VV"=20
regex=3D"false"/&gt;</FONT></FONT></DIV>
<DIV><FONT><FONT face=3DArial size=3D2></FONT></FONT>&nbsp;</DIV>
<DIV><FONT><FONT><SPAN class=3D389042409-27112002><FONT face=3DArial =
size=3D2>ziel=20
w=E4re der folgende check, welcher abh=E4ngig von einer =
identifizierenden zelle eine=20
zeile lokalisiert, in der ich dann eine bestimmte zelle fachlich =
=FCberpr=FCfen kann=20
(die identifzierende zelle, welche CH365 enth=E4lt sieht man oben nicht, =
man=20
k=F6nnte in diesem beispiel jedoch auch EUR verwenden, da es nur eine =
zeile mit=20
EUR gibt):</FONT></SPAN><BR><FONT face=3DArial size=3D2>&lt;verifyxpath=20
stepid=3D"check C510 for bond daily365 "=20
xpath=3D"/html/body/table/tr[td=3DCH365]/td[3]"=20
text=3D"EUR"&nbsp;regex=3D"false"/&gt;</FONT></FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><SPAN class=3D389042409-27112002><FONT face=3DArial size=3D2>ich =
w=E4re froh, um=20
hinweise, welche mich in die richtige richtung f=FChren k=F6nnen. oder =
gibt es=20
andere m=F6glichkeiten? ich habe auch schon an regular expression checks =
gedacht,=20
jedoch habe ich es nicht fertig gebracht eine regex expression zu =
formulieren,=20
welche vor der n=E4chsten html zeile stoppt alla "CH365.*?EUR" jedoch =
darf=20
dazwischen keine &lt;tr&gt; vorkommen -&gt; "CH365[^tr]*?EUR" geht =
leider nicht,=20
da dadurch generell alle t und r buchstaben ausgeschlossen werden (das =
f=FChrt=20
leider dazu, dass er z.b. schon bei equity stoppt). man sollte explizit =
das wort=20
'tr' ausschliesen k=F6nnen.</FONT></SPAN></DIV>
<DIV><SPAN class=3D389042409-27112002><FONT face=3DArial size=3D2>vielen =
dank f=FCr eure=20
unterst=FCtzung, mfg, =
kuno</FONT></SPAN></SPAN></FONT></DIV></BODY></HTML>
=00
------_=_NextPart_001_01C295FB.BAA75C66--

--------------InterScan_NT_MIME_Boundary--