如何使用Behat查找带有正则表达式作为通配符的字符串?

时间:2018-01-30 10:03:36

标签: php regex behat

我想创建一个Behat规则,允许我查找带有通配符的文本,因为我找不到任何接近它的内容。

我有时必须在Drupal项目中创建一些内容,但标题不是由用户定义的,所以在运行测试之前我无法知道保存时标题是什么。 I.E.,在我的情况下,我想检查一下我是否能在页面中看到以下文字

  

已创建“ISAI”类型的内容“N°1”。

在这里,我想将N°1放在通配符中,所以我只需要查找

  

“'ISAI'类型的内容'/ ^ [A-Z] {1}°[0-9] + $ /'已创建。”

我开始创建一个如下所示的函数:

And I should see the text "The content 'WILDCARD', of type 'ISAI', has been created" with wildcard matching "/[a-zA-Z °]+$/"

/**
* @Then I should see the text :arg1 with wildcard matching :arg2
*/
public function iShouldSeeTheTextWithWildcardMatching($text, $regex){
  $string = str_replace('WILDCARD', $regex, $text);
  $result = $this->getSession()->getPage()->find('css', sprintf('div.alert-success:contains("%s")', $string));
  echo $result; // is null
}

然而,它失败了,因为选择器找不到任何带“/”的东西(因为它是正则表达式)。

我的问题是:是否可以使用正则表达式找到一些文本,我应该怎样做才能使我的方法有效?

1 个答案:

答案 0 :(得分:1)

有些选项可能是:

<强> A
根据2个部分文本创建一个选择器,并排除通配符中的内容。

//div[@class='alert-success'][contains(text(), 'The content')][contains(text(), 'of type \'ISAI\', has been created.')]

<强>乙
另一个解决方案是查看此元素的文本中是否匹配。

步骤:
  - 定义正则表达式
  - 等待成功消息并获取文本
  - 使用定义的正则表达式检查保存的文本中是否匹配

  

如果需要,可以使用变量创建字符串/正则表达式。使用echo来确保您的选择器有效。确保页面已加载。