Мне нужно утвердить заголовок страницы для моего теста, который является заголовком вкладки/окна с использованием Behat + Mink
Я попытался getWindowName(), но понял, что это не функцию, которую я ищу.Как утверждать заголовок страницы/вкладки/окна в Behat + Mink
ответ
Вы должны использовать обычную находку css для тега title и использовать getText() для получения заголовка.
CSS-код должен быть: «Название головы»
Ваше решение почти нормально, вы должны следить за возможным исключением, особенно с летальным исходом, которые могут остановить свой пакет, если встречается.
Например find()
метод возвращает объект или null
, если null
возвращается, и вы используете getText()
на него приведет к неустранимого исключения и ваш люкс остановится.
Немного улучшенный метод:
/**
* @Given /^the page title should be "([^"]*)"$/
*/
public function thePageTitleShouldBe($expectedTitle)
{
$titleElement = $this->getSession()->getPage()->find('css', 'head title');
if ($titleElement === null) {
throw new Exception('Page title element was not found!');
} else {
$title = $titleElement->getText();
if ($expectedTitle !== $title) {
throw new Exception("Incorrect title! Expected:$expectedTitle | Actual:$title ");
}
}
}
Улучшение:
- обработано возможному летальному за исключением
- бросить исключение, если элемент не найден
- бросить исключения с деталями, если названия не совпадают
Обратите внимание, что вы также можете использовать другие методы, чтобы проверить заголовок как: stripos
, strpos
или просто сравнить строки, как я. Я предпочитаю простой сравнения, если мне нужен точный текст или метод strpos/stripos php, и я лично, избегаю регулярных исключений и связанных с ними методов, таких как preg_match, которые обычно немного медленнее.
Одним из основных улучшений, которые вы можете сделать, является метод ожидания элемента и обработки исключения для вас и использования этого вместо простой находки, которую вы можете использовать, когда вам нужно принять решение на основе наличия элемента как: если элемент существует делать это еще ..
Спасибо, Лауда. Да, это действительно сработало. Написала следующую функцию:
/**
* @Given /^the page title should be "([^"]*)"$/
*/
public function thePageTitleShouldBe($arg1)
{
$actTitle = $this->getSession()->getPage()->find('css','head title')->getText();
if (!preg_match($arg1, $actTitle)) {
throw new Exception ('Incorrect title');
}
}