我正在使用Behat和Mink框架进行BDD(使用PHP)
我正在遍历td元素以验证值和文本。由于返回的所有元素都是span元素,因此我可以在元素上使用getText(),这一切都很好。
$page = $this->getSession()->getPage();
$expected_values = ["Tuesday", 22, 22, 22, 22];
$actual_rows = $page->findAll('css', 'table.admin-table tbody tr td');
$actual_Values = array();
foreach($actual_rows as $row) {
$actual_Values[] = $row->getText();
}
assertEquals($expected_values, $actual_Values);
但最近,页面的设计发生了变化。并且一些span元素已被输入元素替换。 getText()返回null,所以我用getValue()替换它。但是,由于第一个td元素是一个span,如果我们使用getText(),它将返回null。
无论如何,我可以从上面的代码片段中跳过循环中的第一个td。
更新: 以下是我在评论中未正确呈现的内容:
$actual_Values[] = $row->find('css', 'input')->getValue();
答案 0 :(得分:3)
我误读并认为您想要独立获取文本,无论是输入还是跨度。要跳过第一个值,您可以:
foreach($actual_rows as $row) {
if ($row !== reset($actual_rows) {
$actual_Values[] = $row->getText();
}
}
或者更好的方法是array_shift($actual_rows)
删除第一个值并执行正常循环。
或者另一种方法是将您的选择器更改为$page->findAll('css', 'table.admin-table tbody tr td:not(:first-child)');
以选择除第一个td
孩子之外的所有内容。