Метод click класса HttpBrowser
Метод click класса HttpBrowser эмулирует
клик пользователя по ссылке на текущей странице.
Первым параметром передаётся текст ссылки, CSS-селектор
или объект Link. После вызова браузер выполняет
переход по найденной ссылке и метод возвращает объект
Crawler с содержимым новой страницы.
Класс HttpBrowser используется в функциональных
тестах Symfony вместо реального браузера: он не выполняет
JavaScript, но полностью эмулирует HTTP-переходы, редиректы,
куки и формы.
Синтаксис
$crawler = $browser->click($link);
Пример
Давайте создадим контроллер с двумя маршрутами, один из которых содержит ссылку на другой:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
return new Response('<a href="/user">user</a>');
}
#[Route('/user', name: 'article_user')]
public function user(): Response
{
return new Response('hello');
}
}
?>
Теперь напишем тест, который переходит на главную страницу
и кликает по ссылке с текстом 'user':
<?php
namespace AppTestsController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testClick(): void
{
$client = static::createClient();
$client->request('GET', '/');
$crawler = $client->clickLink('user');
$this->assertSame('hello', $client->getResponse()->getContent());
}
}
?>
Результат выполнения теста:
"hello"
Пример
Метод click принимает не только текст ссылки, но и
объект Link, полученный из Crawler. Это удобно, когда
нужно кликнуть по конкретной ссылке из множества похожих:
<?php
namespace AppTestsController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testClickLink(): void
{
$client = static::createClient();
$crawler = $client->request('GET', '/');
$link = $crawler->selectLink('user')->link();
$crawler = $client->click($link);
$this->assertSelectorTextContains('body', 'hello');
}
}
?>
Результат выполнения теста:
"hello"
Смотрите также
-
класс
HttpBrowser,
который эмулирует браузер в тестах -
метод
request,
который выполняет HTTP-запрос -
метод
submit,
который отправляет форму -
метод
followRedirect,
который выполняет переход по редиректу