如何根据 Behat 中的文本 select HTML 标签中的元素?

How to select the element in HTML tags based on its text in Behat?

我是运行以下行为场景:

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

对于以下 HTML 片段:

<strong>Testing body</strong>

但是我得到一个错误:

The text "Testing body" was not found in the text of the element matching 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

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

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

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

例如:#myid strong -> 将在 id 为 myid

的元素中搜索 strong

其他元素也是如此,您可以使用 ol>li 或 ul>li,但如果找到更多元素,您将需要在前面添加一个额外的选择器以缩小该部分。

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

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

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

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

以下方法可能有所帮助:

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

而不是 contains, you can also use starts-with and other

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