如何使用 XPath 获取特定 table 单元格内的值
How to get the value inside a specific table cell using XPath
我正在学习如何使用 Behat/Mink 和 Selenium 编写验收测试,我需要验证特定 table 单元格的值。我发现我必须使用 xpath 来执行此操作,但我无法弄清楚确切的语法。 table如下:
html:
<table class="admintable generaltable" id="relationships">
<thead>
...
</tr>
</thead>
<tbody><tr class="r0 lastrow">
<td class="leftalign cell c0" style="">Cohort 1</td>
<td class="leftalign cell c1" style="">0</td>
<td class="leftalign cell c2" style="">Non-editing teacher</td>
<td class="centeralign cell c3" style="">No</td>
<td class="leftalign cell c4" style="">No</td>
<td class="leftalign cell c5 lastcol" style=""><a href="http://150.162.242.121/mariana/unasus-cp/local/relationship/edit_cohort.php?relationshipcohortid=1&delete=1"><img src="http://150.162.242.121/mariana/unasus-cp/theme/image.php/standard/core/1445875205/t/delete" alt="Delete" title="Delete" class="iconsmall" /></a> <a href="http://150.162.242.121/mariana/unasus-cp/local/relationship/edit_cohort.php?relationshipcohortid=1"><img src="http://150.162.242.121/mariana/unasus-cp/theme/image.php/standard/core/1445875205/t/edit" alt="Edit" title="Edit" class="iconsmall" /></a></td>
</tr>
</tbody>
</table>
我要写的语句是:
Then I should see "No" in the "???" "css_element"
我应该如何确切地编写该语句以指定我想要第一个 "No",在 "Inscrição em vários grupos" 下,在 "No" 部分。
编辑:我最初犯了一个错误,我应该使用 "xpath_element" 作为选择器,而不是 "css_element"
我假设 Inscrição em vários grupos
文本总是出现在第 4 列。为此编写 XPath 非常容易,因为我们可以直接使用索引。
//table[@id='relationships']/tbody/tr[1]/td[4]
如果标题列的列号不同,您必须找到 Inscrição em vários grupos
标题的索引(列号),然后使用它来查找相应的值列。
-- the below code will get you the index of the heading column
count(//thead//tr/th[.='Inscrição em vários grupo']/preceding-sibling::*)+1
-- use this index to find the corresponding value
//table[@id='relationships']/tbody/tr[1]/td[count(//thead//tr/th[.='Inscrição em vários grupo']/preceding-sibling::*)+1]
注意:索引从1开始不是0
从下面的link来看,behat的语法好像是这样的:
How to assert that a text only exists 1 time in Mink
https://whosebug.com/questions/32202047/could-not-find-element-with-xpath-in-behat-mink
$session = $this->getMainContext()->getSession();
$element = $session->getPage()->find(
'xpath',
$session->getSelectorsHandler()->selectorToXpath('xpath', '//table[@id='relationships']/tbody/tr[1]/td[4]');
$elementText = $element->getText();
if ($elementText != 'no') {
throw new Exception('Value us not correct');
}
我知道您已经接受了答案,但您是否尝试过像 td.c3
这样的简单 CSS 选择器?这对我来说似乎更直接。
我正在学习如何使用 Behat/Mink 和 Selenium 编写验收测试,我需要验证特定 table 单元格的值。我发现我必须使用 xpath 来执行此操作,但我无法弄清楚确切的语法。 table如下:
html:
<table class="admintable generaltable" id="relationships">
<thead>
...
</tr>
</thead>
<tbody><tr class="r0 lastrow">
<td class="leftalign cell c0" style="">Cohort 1</td>
<td class="leftalign cell c1" style="">0</td>
<td class="leftalign cell c2" style="">Non-editing teacher</td>
<td class="centeralign cell c3" style="">No</td>
<td class="leftalign cell c4" style="">No</td>
<td class="leftalign cell c5 lastcol" style=""><a href="http://150.162.242.121/mariana/unasus-cp/local/relationship/edit_cohort.php?relationshipcohortid=1&delete=1"><img src="http://150.162.242.121/mariana/unasus-cp/theme/image.php/standard/core/1445875205/t/delete" alt="Delete" title="Delete" class="iconsmall" /></a> <a href="http://150.162.242.121/mariana/unasus-cp/local/relationship/edit_cohort.php?relationshipcohortid=1"><img src="http://150.162.242.121/mariana/unasus-cp/theme/image.php/standard/core/1445875205/t/edit" alt="Edit" title="Edit" class="iconsmall" /></a></td>
</tr>
</tbody>
</table>
我要写的语句是:
Then I should see "No" in the "???" "css_element"
我应该如何确切地编写该语句以指定我想要第一个 "No",在 "Inscrição em vários grupos" 下,在 "No" 部分。
编辑:我最初犯了一个错误,我应该使用 "xpath_element" 作为选择器,而不是 "css_element"
我假设 Inscrição em vários grupos
文本总是出现在第 4 列。为此编写 XPath 非常容易,因为我们可以直接使用索引。
//table[@id='relationships']/tbody/tr[1]/td[4]
如果标题列的列号不同,您必须找到 Inscrição em vários grupos
标题的索引(列号),然后使用它来查找相应的值列。
-- the below code will get you the index of the heading column
count(//thead//tr/th[.='Inscrição em vários grupo']/preceding-sibling::*)+1
-- use this index to find the corresponding value
//table[@id='relationships']/tbody/tr[1]/td[count(//thead//tr/th[.='Inscrição em vários grupo']/preceding-sibling::*)+1]
注意:索引从1开始不是0
从下面的link来看,behat的语法好像是这样的:
How to assert that a text only exists 1 time in Mink
https://whosebug.com/questions/32202047/could-not-find-element-with-xpath-in-behat-mink
$session = $this->getMainContext()->getSession();
$element = $session->getPage()->find(
'xpath',
$session->getSelectorsHandler()->selectorToXpath('xpath', '//table[@id='relationships']/tbody/tr[1]/td[4]');
$elementText = $element->getText();
if ($elementText != 'no') {
throw new Exception('Value us not correct');
}
我知道您已经接受了答案,但您是否尝试过像 td.c3
这样的简单 CSS 选择器?这对我来说似乎更直接。