我需要为投资者A查找具有贷款金额的元素(在本例中为100,100)
有人可以建议如何编写xpath来查找那些元素
[示例] 在下面的屏幕截图中,我需要找到xpath来获取在第一行和第二行中选择了单选按钮的文本为100的元素。
xpath下面给出了所有三个贷款额
//td[contains(., "Investor A")]/preceding-sibling::td[descendant::input][1]/label/text()
但是我只需要从第一行和第二行选择了单选按钮的借出金额
<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
crossorigin="anonymous"></script>
<html>
<head>
<style>
table {
border: 1px dashed #cccccc;
border-collapse: collapse;
}
table td {
border: 1px dashed #cccccc;
}
</style>
</head>
<body>
<table>
<tr>
<td>
<label>Loan1</label>
</td>
<td>
<input type='radio' name='L1' id='L1_one'></input>
<label>100</label>
</td>
<td>
<label>Investor A</label>
</td>
<td>
<input type='radio' name='L1' id='L1_two'></input>
<label>200</label>
</td>
<td>
<label>Investor B</label>
</td>
<td>
<input type='radio' name='L1' id='L1_three'></input>
<label>300</label>
</td>
<td>
<label>Investor C</label>
</td>
</tr>
<tr>
<td>
<label>Loan2</label>
</td>
<td>
<input type='radio' name='L2' id='L2_one'></input>
<label>100</label>
</td>
<td>
<label>Investor A</label>
</td>
<td>
<input type='radio' name='L2' id='L2_two'></input>
<label>200</label>
</td>
<td>
<label>Investor B</label>
</td>
<td>
<input type='radio' name='L2' id='L2_three'></input>
<label>300</label>
</td>
<td>
<label>Investor C</label>
</td>
</tr>
<tr>
<td>
<label>Loan3</label>
</td>
<td>
<input type='radio' name='L3' id='L3_one'></input>
<label>100</label>
</td>
<td>
<label>Investor A</label>
</td>
<td>
<input type='radio' name='L3' id='L3_two'></input>
<label>200</label>
</td>
<td>
<label>Investor B</label>
</td>
<td>
<input type='radio' name='L3' id='L3_three'></input>
<label>300</label>
</td>
<td>
<label>Investor C</label>
</td>
</tr>
</table>
</body>
答案 0 :(得分:1)
尝试此xpath:
//td[contains(., "Investor A")]/preceding-sibling::td[descendant::input[@selected or @checked]][1]/label/text()
答案 1 :(得分:0)
在此示例中,如何获得单选按钮取决于贷款标签和值:
//tr[.//label[.='Loan1']]//td[./label[.='100']]/input
//tr[.//label[.='Loan1']]//td[./label[.='300']]/input
//tr[.//label[.='Loan2']]//td[./label[.='100']]/input
//tr[.//label[.='Loan3']]//td[./label[.='200']]/input
答案 2 :(得分:0)
由于您要根据给定的贷款标签(Loan1)和投资者(投资者A)寻找贷款金额,因此可以使用下面的XPath。
//tr[.//label[.='Loan1']]//label[.='Investor A']//preceding::label[1]
^ find a TR
^ that has a descendant LABEL with the loan label
^ that TR has a descendant LABEL that contains the investor name
^ then go back up the DOM and find the first LABEL
这将返回“ 100”。
您可以将所需的任何贷款和投资者标签插入XPath,并获取所需的任何贷款金额。
"//tr[.//label[.='#{loanLabel}']]//label[.='#{investorLabel}']//preceding::label[1]"
答案 3 :(得分:0)
如果自从HTML加载以来,单选按钮的选择状态已更改,则XPath将无法执行您要执行的操作。这是因为XPath无法访问反映当前状态的输入属性(它只能访问属性)。您还遇到一个问题,即
input [id $ =“ _ one”]:选中+标签
因为您想要CSS可以找到的标签元素的文本,并且表明您正在使用Capybara,所以它将是
texts = all(:css, 'input[id$="_one"]:checked + label').map(&:text)
注意:这实际上并不使用文本“ Investor A”来查找您感兴趣的元素。如果ID不可靠,并且使用“ Investor A”文本很重要,则无法使用单个XPath或CSS以及HTML的构造方式。