如何遍历Behat和Mink中的元素

时间:2014-08-14 10:56:13

标签: php bdd behat mink

我正在使用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();

1 个答案:

答案 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孩子之外的所有内容。