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)
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)
contains()在 XPath v1.0 与 v2.0+ 中的工作方式有所不同在 XPath 1.0 中,给定一个节点集,contains()只会评估该集中的第一个节点。这就是为什么您的初始 XPath 成功找到包含 的文本节点'$3.00',而不是包含'$2.00'.
与 $3.00的xpath工作方式接近的 XPath 表达式如下:
//table[tbody/tr[2]/td/table/tbody/tr/td[2]/text()[contains(.,'$2.00')]]
Run Code Online (Sandbox Code Playgroud)
上面的 XPath 通过应用contains()在单个文本节点上而不是一次传递多个文本节点来工作。
| 归档时间: |
|
| 查看次数: |
7624 次 |
| 最近记录: |