Xbr <br/>之后的文本

kap*_*rkp 6 html xml xpath codeception

希望通过此代码块获得$ 2.00的XPath:

<td class="undefined" colspan="6">
   <table class="history-bill-payments" cellspacing="0" cellpadding="0" border="0" align="center" width="99%">
<thead>
<tbody>
   <tr>
      <td valign="top">04/19/2016</td>
      <td valign="top" style="text-align:right; height:">
         $3.00
         <br/>
         $2.00
      </td>
Run Code Online (Sandbox Code Playgroud)

我尝试了这些但无济于事

$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/following-sibling::br)]"); 
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/preceding-sibling::br/text(),'$2.00')]"); 
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/following-sibling::br/text(),'$2.00')]");
Run Code Online (Sandbox Code Playgroud)

在Firefox中使用firepath,我得到了这个XPath

html / body / div [4] / div [2] / div / div / div / div / div / table / tbody / tr [2] / td / table / tbody / tr / td [2]

我能够得到$ 3.00的xpath

$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/text(),'$3.00')]");
Run Code Online (Sandbox Code Playgroud)

kjh*_*hes 6

td有一定内容的

从您的试验来看,您似乎可以从字面上删除$2.00,因此您可以使用此 XPath 2.0 表达式来获取以td结尾的内容$2.00

//td[ends-with(normalize-space(), '$2.00')]
Run Code Online (Sandbox Code Playgroud)

请注意,浏览器通常不支持 XPath 2.0,因此如果在浏览器中运行并且您可以$2.00出现在以下位置中的任何位置,请使用此 XPath 1.0 表达式td

//td[contains(.,'$2.00')]
Run Code Online (Sandbox Code Playgroud)

后面的文字br

如果您不想逐字指定$2.00,则必须声明一些其他不变约束。例如,此 XPath 将返回以 开头的bra 中包含的 后面的字符串:td$3.00

normalize-space(//td[starts-with(normalize-space(),'$3.00')]/br/following::text())
Run Code Online (Sandbox Code Playgroud)

也可以看看


har*_*r07 6

在 XPath 1.0 中,给定一个节点集,contains()只会评估该集中的第一个节点。这就是为什么您的初始 XPath 成功找到包含 的文本节点'$3.00',而不是包含'$2.00'.

与 $3.00xpath工作方式接近的 XPath 表达式如下:

//table[tbody/tr[2]/td/table/tbody/tr/td[2]/text()[contains(.,'$2.00')]]
Run Code Online (Sandbox Code Playgroud)

上面的 XPath 通过应用contains()在单个文本节点上而不是一次传递多个文本节点来工作。