Как утвердить заголовок страницы/вкладки/окна в Behat + Mink

Мне нужно утвердить заголовок страницы для моего теста, который является заголовком вкладки/окна с помощью Behat+Mink
Я попробовал getWindowName(), но понял, что это не та функция, которую я ищу.


person Shweta Sharma    schedule 25.11.2016    source источник


Ответы (3)


Вы должны использовать обычный поиск с помощью css для тега заголовка и использовать getText() для получения заголовка.

CSS должен быть: "head title"

Ваше решение почти в порядке, вам нужно следить за возможными исключениями, особенно фатальными, которые могут остановить ваш пакет, если они возникнут.

Например, метод 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, которые обычно немного медленнее.

Одним из основных улучшений, которое вы могли бы сделать, является наличие метода ожидания элемента и обработки исключения для вас, а также использование его вместо простого поиска, поиск, который вы можете использовать, когда вам нужно принять решение на основе наличия элемента, например: если элемент существует сделать это еще..

person lauda    schedule 25.11.2016

Спасибо Лауда. Да, это действительно сработало. Написал функцию ниже:

/**
     * @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');
        }
    }
person Shweta Sharma    schedule 28.11.2016

Это не сработало для меня в случаях, когда заголовок манипулируется с помощью Javascript и history.pushState/replaceState

Вот реализация, которая работает для Javascript:

  /**
   * @Then /^the title is "([^"]*)"$/
   */
  public function theTitleIs($arg1) {
    $title = $this->getSession()->evaluateScript("return document.title");
    if ($arg1 !== $title) {
      throw new \Exception("expected title '$arg1', got '$title'");
    }
  }
person miiimooo    schedule 04.07.2019