Как запустить тест PHPUnit Selenium без запуска нового окна браузера для каждой функции?

Я пытаюсь запустить тестовый селен с помощью PHPUnit. И первое, что я делаю, это пробую функцию входа в систему, она прекрасно работает, но затем я хочу запустить функцию проверки информации на странице, следующей за входом в систему, но она открывает новый браузер вместо продолжения в текущем окне браузера. Причина в том, что это проблема, потому что страница настроена на удаление аутентификации при входе в систему, когда окно закрыто, поэтому, если вы используете $ this->url () для перехода на страницу выдает ошибку, которая мне необходима для входа. Это мой код прямо сейчас, он запускает браузер и запускает функцию для проверки формы входа, затем закрывает браузер, открывает новый и запускает проверку ссылки. Это, конечно, приводит к ошибке из-за ошибки аутентификации, потому что окно было закрыто. Я мог бы запустить все тесты в одной функции, но это действительно неаккуратное кодирование, и я хочу избежать этого. Кто-нибудь знает, как это решить?

setBrowser("firefox");
            $this->setBrowserUrl("https://**************************");
        }

        public function testLoginForm()
        {

            $this->url("login.php");
            $this->byLinkText('Forgot your password?');
            $form = $this->byCssSelector('form');
            $this->byName('username')->value('test');
            $this->byName('password')->value('1234');
            $form->submit();
        }


        public function testCheckForMainMenueLinks ()
        {
            $this->url("index.php");
            $this->byLinkText('Home');
            $this->byLinkText('Products');
            $this->byLinkText('About us');
            $this->byLinkText('Contact');
        }
    }
?>
 user159384627 мая 2013 г., 08:34
Я обновил пост
 Dirk24 мая 2013 г., 17:12
Можете ли вы предоставить некоторые фрагменты кода, который выиспользую этовызывает проблемы?

Ответы на вопрос(5)

Поделиться сеансами браузера вSelenium2TestCase, вы должны установитьsessionStrategy => 'shared' в вашей первоначальной настройке браузера:

public static $browsers = array(
    array(
        '...
        'browserName' => 'iexplorer',
        'sessionStrategy' => 'shared',
        ...
    )
);

Альтернатива (по умолчанию).'isolated'

 Ben07 окт. 2013 г., 04:13
Да, я был очень взволнован, чтобы найти его :) Наконец-то впереди кривой на этот раз лол.
 user157865304 окт. 2013 г., 11:03
Это отлично сработало для меня, и гораздо менее хакерски, чем некоторые решения!

сделайте активы в одной функции, потому что это функциональный тест. я новичок в phpunit и селене, но я успешно проверил все в одном, как это:

public function testAuth(){  

$this->open('register.php&XDEBUG_SESSION_START=PHPSTORM');
$this->assertTextPresent('Register');
$this->type('name=email', "...");
$this->type('name=firstname', "...");
$this->type('name=lastname', "...");       
$this->type('name=password', "...");
$this->type('name=verifyPassword', "...");
$this->click("reg-butt");
$this->waitForPageToLoad("5000");
$this->assertTextPresent('Profile');
$this->open('logout.php');
$this->assertTextPresent('text from redirect page');
$this->open('login.php');
.....

}
Решение Вопроса

Итак, я думаю, вы можете просто вызвать функцию непосредственно из другой функции, например так:

public function testOne
{
#code
$this->Two();
}

public function Two()
{
#code
$this->Three();
}

public function Three()
{
#code
}

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

Вы можете вызвать PHPUnit_Extensions_SeleniumTestCase :: shareSession (true), чтобы включить повторное использование окна браузера.

вруководство это говорит:

В Selenium 1.1.1 включена экспериментальная функция, позволяющая пользователю разделить сеанс между тестами. Единственный поддерживаемый случай - это совместное использование сеанса между всеми тестами, когда используется один браузер. Вызовите PHPUnit_Extensions_SeleniumTestCase :: shareSession (true) в файле начальной загрузки, чтобы включить общий доступ к сеансу. Сеанс будет сброшен в случае неуспешных тестов (неудачных или неполных); пользователь должен избегать взаимодействия между тестами путем сброса файлов cookie или выхода из тестируемого приложения (с помощью метода tearDown ()).

 Ben02 окт. 2013 г., 04:24
... но я только что понял это :)
 Ben02 окт. 2013 г., 02:23
Тот же опыт здесь. :(
 jarnoan20 авг. 2013 г., 14:09
Хмм ... Я думал, что это сработало, но теперь он продолжает открывать новые окна. Я'Я больше не уверен, работает ли это или нет.

Элегантный способ установить общий сеанс - использовать PHPUnitsetUpBeforeClass() метод:

public static function setUpBeforeClass()
{
    self::shareSession(true);
}

Ваш ответ на вопрос