Я хотел бы создать функцию, которая заставит Бехата разобрать мой HTML и сказать мне, сколько раз он находит определенный текст. Я нашел бесчисленное множество способов сделать это, но так как я хотел бы повторно использовать концепцию, я не могу дать ему конкретный класс div, где его найти, поскольку он может быть вне div.
Это то, что я сделал до сих пор
testfeature.feature
And I should see "CISIA - Arcueil" 2 times
FeatureContext.php
public function iShouldSeeTimes($text, $count) {
$element = $this->getSession()->getPage();
$result = $element->findAll('css', sprintf('div:contains("%s")', $text));
if(count($result) == $count && strpos(reset($result)->getText(), $text)) {
return;
}
else {
throw new ExpectationException('"' . $text . '" was supposed to appear ' . $count . ' times, got ' . count($result) . ' instead', $this->getSession());
}
}
Это немного грязно, но я приведу все в порядок, как только это сработает. До сих пор с этим кодом я получал 19 элементов, каждый текст которых содержится в каждом элементе div на странице, которую я хочу проверить. В некотором смысле, у меня есть возможность добраться до своей цели, но я бы хотел, чтобы непосредственно получить то, что мне нужно (мои два вхождения) внутри $result
, Тем не менее, похоже, что я делаю что-то не так с sprintf()
функция.
Есть ли способ заставить Бехата искать конкретный текст?
заранее спасибо
использование XPath
который соответствует любому типу элемента с содержит вместо css
,
Например:
$text = 'my text';
findAll('xpath', "//*[contains(text(), '$text')]");
Второй альтернативой будет использование регулярных выражений. Я рекомендую первый.
Других решений пока нет …