Как заставить Бехата искать вхождения конкретного текста?

Я хотел бы создать функцию, которая заставит Бехата разобрать мой 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() функция.

Есть ли способ заставить Бехата искать конкретный текст?

заранее спасибо

0

Решение

использование XPath который соответствует любому типу элемента с содержит вместо css,

Например:

$text = 'my text';
findAll('xpath', "//*[contains(text(), '$text')]");

Второй альтернативой будет использование регулярных выражений. Я рекомендую первый.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]