Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Selenium тест c проверкой того, что страница перегрузилась и не перезгрузилась в зависимости от действий

page-object
javascript
webdriver
Теги: #<Tag:0x00007f7b648e3be0> #<Tag:0x00007f7b648e3a00> #<Tag:0x00007f7b648e38c0>

(Tatyana Durova) #1

Подскажите пожалуйста, как реализовать такой тест при single-page приложений с кучей джаваскрипта (backbone):

  • если я нахожусь на главной странице и кликаю на логотип, на странице должно происходить вообще ничего, никаких перезагрузок и тд;

  • если я нахожусь на странице товара и кликаю логотип сайта, то я перехожу на главную страницу

  • если я была на главной странице. но поверх у меня была открыта некая джаваскрипт форма, типа SignInPage, я кликаю на логотип - форма закрывается.


(Alexander Momot) #2

Завести в петлю проверку title() и url() и проверять автоматически каждый раз при любом действии. Отстреливать exception если не совпало с ожидаемым. Использовать PageObject паттерн для страниц, внутри page object-а определять жёстко поле Url = “” (к примеру) и Title = “”. Автоматически тягать во время прогона теста и сверять текущий с ожидаемым на странице (и соответственно в объекте)


(Tatyana Durova) #3

Я сделала так, хорошо работает
js.ExecuteScript(“window.MyWindow = “hello””);
string textOld = (string)js.ExecuteScript(“return window.MyWindow”);
mainPage.Header.ClickHomeButton();
string textNew = (string)js.ExecuteScript(“return window.MyWindow”);
textNew.ShouldBeEquivalentTo(textOld);


(Tiko Lakin) #4

после каждого шага где открыли страницу

$this->getSession()->evaluateScript('behat_same_page = 1;');

а потом проверяем, если страница перезагрузилась сама

$have_var = $this->getSession()->evaluateScript("return (typeof behat_same_page !== 'undefined');");
    if ($have_var) {
      return;
    }
 throw new Exception('Page has been changed');

(Tatyana Durova) #5

Не могли бы вы более подробно объяснить
$this->getSession()->evaluateScript(‘behat_same_page = 1;’);

getSession() - откуда такой метод, где?
evaluateScript - аналог ExecuteScript(“return (typeof behat_same_page !== ‘undefined’);”")?


(Tatyana Durova) #6

С behat вообще не знакома… еще вопрос, какую конректно сессию мы пытаемся получить? куку из local storage? и изменить ее значение скриптом? или создать рядом новую дополнительную для проверки? в общем плз поподробней…


(Tiko Lakin) #7

Доброго времени суток.
Не обращайте внимания на тестовый фрейм

Идея в том чтоб на текущей странице создать переменную js и после проверить есть ли до сих пор эта переменная.
Не знаю Вашего синтаксиса, постарайтесь уловить идею

  1. Открыть страницу - создать переменную js

    js.ExecuteScript(“same_page = 1”);

  2. Выполняем любые действия на странице

  3. Проверяем существует ли переменная на текущей странице (если страница была перезагруженна или новая - переменная не будет существовасть. Если страница не перезагружалась (аякс сработал коректно) - переменная будет доступная)

    if (js.ExecuteScript(“return same_page”) != 1) {
    // Exception
    }


(Tatyana Durova) #8

Я собственно это и делаю, но все равно спасибо! =)