如何根据Behat中的文本选择HTML标记中的元素?

时间:2016-08-31 09:32:43

标签: behat mink

我正在运行以下Behat场景:

Then I should see "Testing body" in the "strong" element

以下HTML代码段:

<strong>Testing body</strong>

但是我收到了错误:

  

在匹配css“strong”

的元素的文本中找不到文本“测试体”

检查元素是否包含以下标记的最佳方法是什么?

<em>Testing body</em>
<ol><li>Testing body</li>
</ol>
<ul><li>Testing body​​​​​​​</li>
</ul>

我正在尝试使用wysiwyg.feature语法:

Then I should see "Testing body" in the "<Element>" element with the "<Property>" CSS property set to "<Value>" in the "Pearson Content" region

2 个答案:

答案 0 :(得分:1)

确保使用的选择器是唯一的。

根据使用的方法,您可能需要id | name | label | value或css selector。

我的情况下使用的选择器过于笼统,你需要通过在前面添加一个额外的元素来缩小该部分,以告诉他在较小的部分中搜索。

例如:#myid strong - &gt;将在具有id myid的元素中搜索强大

对于其他元素也一样,你可以使用ol&gt; li或ul&gt; li,但如果找到更多元素,你需要在前面添加一个额外的选择器来缩小该部分。

始终在浏览器中手动检查CSS并确保其唯一或首先找到您需要的元素。

如果要检查包含某些文本的元素,可以像这样使用XPath:

//strong[contains(text(), 'Testing body')]

如果你能像我上面所说的那样识别这个部分你也可以使用css,但我需要更多来自html,一个大部分以获得更好的选择器。

答案 1 :(得分:1)

以下方法可能有所帮助:

/**
 * @Given I should see :text in the :tag element
 */
public function iShouldSeeInTheElement($text, $tag) {
  $this->verifyElementByXpath("//${tag}[contains(text(), '${text}')]");
}

您可以使用containsstarts-with代替other

注意:我没有测试过,所以如果你这样做,请提出改进​​建议。