我想创建一个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
}
然而,它失败了,因为选择器找不到任何带“/”的东西(因为它是正则表达式)。
我的问题是:是否可以使用正则表达式找到一些文本,我应该怎样做才能使我的方法有效?
答案 0 :(得分:1)
有些选项可能是:
<强> A 强>
根据2个部分文本创建一个选择器,并排除通配符中的内容。
//div[@class='alert-success'][contains(text(), 'The content')][contains(text(), 'of type \'ISAI\', has been created.')]
<强>乙强>
另一个解决方案是查看此元素的文本中是否匹配。
步骤:
- 定义正则表达式
- 等待成功消息并获取文本
- 使用定义的正则表达式检查保存的文本中是否匹配
如果需要,可以使用变量创建字符串/正则表达式。使用echo来确保您的选择器有效。确保页面已加载。