<br/> 之后文本的 XPath
XPath for text after <br/>
希望通过此块获得 $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:">
.00
<br/>
.00
</td>
这些我都试过了但是没用
$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(),'.00')]");
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/following-sibling::br/text(),'.00')]");
在 Firefox 中使用 firepath 我得到了这个 XPath
html/body/div[4]/div[2]/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(),'.00')]");
td
有一定内容
从您的试验来看,您似乎可以从字面上键入 .00
,因此您可以使用此 XPath 2.0 表达式来获取以 .00
结尾的 td
:
//td[ends-with(normalize-space(), '.00')]
请注意,浏览器通常不支持 XPath 2.0,因此如果 运行 在浏览器中使用此 XPath 1.0 表达式并且您可以接受 .00
出现在 [=13= 中的任何位置]:
//td[contains(.,'.00')]
br
之后的文本
如果您不想逐字指定 .00
,则必须声明其他一些不变约束。例如,此 XPath 将 return 包含在以 .00
:
开头的 td
中的 br
之后的字符串
normalize-space(//td[starts-with(normalize-space(),'.00')]/br/following::text())
另见
- XPath
contains()
works differently in XPath v1.0 vs v2.0+
- How to use XPath contains() here?
在 XPath 1.0 中,给定一个节点集,contains()
只会计算集合中的第一个节点。这就是为什么您的初始 XPath 成功找到包含 '.00'
的文本节点,而不是包含 '.00'
.
的文本节点的原因
接近您的 $3.00xpath 工作方式的 XPath 表达式如下:
//table[tbody/tr[2]/td/table/tbody/tr/td[2]/text()[contains(.,'.00')]]
上面的 XPath 通过在单个文本节点上应用 contains()
而不是一次传递多个文本节点来工作。
如果需要,只需添加 table id 或任何其他特定定位器。
xpath=//table//tr/td[2]/text()[2]
希望通过此块获得 $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:">
.00
<br/>
.00
</td>
这些我都试过了但是没用
$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(),'.00')]");
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/following-sibling::br/text(),'.00')]");
在 Firefox 中使用 firepath 我得到了这个 XPath
html/body/div[4]/div[2]/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(),'.00')]");
td
有一定内容
从您的试验来看,您似乎可以从字面上键入 .00
,因此您可以使用此 XPath 2.0 表达式来获取以 .00
结尾的 td
:
//td[ends-with(normalize-space(), '.00')]
请注意,浏览器通常不支持 XPath 2.0,因此如果 运行 在浏览器中使用此 XPath 1.0 表达式并且您可以接受 .00
出现在 [=13= 中的任何位置]:
//td[contains(.,'.00')]
br
之后的文本
如果您不想逐字指定 .00
,则必须声明其他一些不变约束。例如,此 XPath 将 return 包含在以 .00
:
td
中的 br
之后的字符串
normalize-space(//td[starts-with(normalize-space(),'.00')]/br/following::text())
另见
- XPath
contains()
works differently in XPath v1.0 vs v2.0+ - How to use XPath contains() here?
在 XPath 1.0 中,给定一个节点集,contains()
只会计算集合中的第一个节点。这就是为什么您的初始 XPath 成功找到包含 '.00'
的文本节点,而不是包含 '.00'
.
接近您的 $3.00xpath 工作方式的 XPath 表达式如下:
//table[tbody/tr[2]/td/table/tbody/tr/td[2]/text()[contains(.,'.00')]]
上面的 XPath 通过在单个文本节点上应用 contains()
而不是一次传递多个文本节点来工作。
如果需要,只需添加 table id 或任何其他特定定位器。
xpath=//table//tr/td[2]/text()[2]