Я пытаюсь запустить тестовый тест selenium, используя PHPUnit. И первое, что я делаю, это попытка входа в систему, это работает отлично, но затем я хочу запустить функцию для проверки информации на странице после входа в систему, но она открывает новый браузер вместо продолжения в текущем окне браузера. Причина, по которой это проблема, заключается в том, что страница настроена на удаление аутентификации входа в систему, когда окно закрыто, поэтому, если вы используете $ this-> url (), чтобы перейти на страницу, она дает ошибку, которую мне нужно войти в систему. Это мой код прямо сейчас. Он запускает браузер и запускает функцию для проверки формы входа в систему, затем закрывает браузер, открывает новый и запускает проверку ссылок. Это, конечно, приводит к ошибке из-за ошибки аутентификации, потому что окно было закрыто. Я мог бы запустить все тесты в одной функции, но это действительно небрежное кодирование, и я хочу избежать этого. Кто-нибудь знает, как это решить?
<?php class TestMyTest extends PHPUnit_Extensions_Selenium2TestCase { public function setUp() { $this->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'); } } ?>
Чтобы разделить сеансы браузера в Selenium2TestCase
, вы должны установить sessionStrategy => 'shared'
в своей начальной настройке браузера:
public static $browsers = array( array( '... 'browserName' => 'iexplorer', 'sessionStrategy' => 'shared', ... ) );
Альтернатива (по умолчанию) – 'isolated'
.
Okej, поэтому, я думаю, вы можете просто вызвать функцию непосредственно из другой функции, например:
public function testOne { #code $this->Two(); } public function Two() { #code $this->Three(); } public function Three() { #code }
и т. д., это просто запустит следующую функцию без нового браузера, однако, если она не сработает нигде в любом тесте, весь тест будет остановлен, поэтому обратная связь не будет такой же хорошей, как отдельные тесты.
сделать активы в одной функции, потому что это функциональный тест. Я новичок в 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'); ..... }
Элегантным способом установки сеанса является использование метода setUpBeforeClass()
PHPUnit:
public static function setUpBeforeClass() { self::shareSession(true); }
Вы можете вызвать PHPUnit_Extensions_SeleniumTestCase :: shareSession (true), чтобы включить повторное использование окна браузера.
В руководстве говорится:
Из Selenium 1.1.1 включена экспериментальная функция, позволяющая пользователю делиться сеансом между тестами. Единственным поддерживаемым случаем является совместное использование сеанса между всеми тестами, когда используется один браузер. Вызовите PHPUnit_Extensions_SeleniumTestCase :: shareSession (true) в вашем файле начальной загрузки, чтобы включить совместное использование сеанса. Сессия будет сброшена в случае неудачных тестов (неудачных или неполных); пользователь должен избегать взаимодействия между тестами путем сброса файлов cookie или выхода из тестируемого приложения (с помощью метода tearDown ()).