pd之后的文本

时间:2016-04-19 12:45:27

标签: html xml xpath codeception

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

private val HDFS_IMPL_KEY = "fs.hdfs.impl"
def loadConf(pathToConf: String): Config = {
   val path = new Path(pathToConf)
   val confFile = File.createTempFile(path.getName, "tmp")
   confFile.deleteOnExit()
   getFileSystemByUri(path.toUri).copyToLocalFile(path, new Path(confFile.getAbsolutePath))

   ConfigFactory.load(ConfigFactory.parseFile(confFile))
}

def getFileSystemByUri(uri: URI) : FileSystem  = {
   val hdfsConf = new Configuration()
   hdfsConf.set(HDFS_IMPL_KEY, classOf[org.apache.hadoop.hdfs.DistributedFileSystem].getName)
FileSystem.get(uri, hdfsConf)
}

我试过这些但无济于事

<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>

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

  

的HTML /体/格[4] / DIV [2] / DIV / DIV / DIV / DIV /表/ tbody的/ TR [2] / TD /表/ tbody的/ TR / TD [2]

我能够得到$ 3.00的xpath

$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')]");

3 个答案:

答案 0 :(得分:4)

在XPath 1.0中,给定一个节点集,select t.team, count(*) correctAnswers from Teams t left join TAnswers ta on ta.TeamID=t.ID left join Answears a on a.ID=ta.AnswerID and a.Correct=1 group by t.team 只会评估集合中的第一个节点。这就是为什么您的初始XPath成功找到包含contains()的文本节点,而不是包含'$3.00'的文本节点。

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

'$2.00'

上面的XPath通过在单个文本节点上应用//table[tbody/tr[2]/td/table/tbody/tr/td[2]/text()[contains(.,'$2.00')]] 而不是一次传递多个文本节点来工作。

答案 1 :(得分:2)

具有特定内容的

td

从你的试验中看,你可以从字面上理解$2.00,所以你可以使用这个XPath 2.0表达式来获得以td结尾的$2.00:< / p>

//td[ends-with(normalize-space(), '$2.00')]

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

//td[contains(.,'$2.00')]

br

后的文字

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

normalize-space(//td[starts-with(normalize-space(),'$3.00')]/br/following::text())

答案 2 :(得分:1)

如果需要,只需添加表ID或任何其他特定定位器。

xpath=//table//tr/td[2]/text()[2]