Метод clickLink класса KernelBrowser
Метод clickLink класса KernelBrowser
имитирует клик пользователя по ссылке на текущей
странице. Первым параметром передаётся текст ссылки,
атрибут id или атрибут alt. Метод
находит ссылку в DOM-дереве ответа, отправляет
GET-запрос по её адресу и возвращает объект
Crawler с новым содержимым страницы.
Синтаксис
public function clickLink(string $linkText): Crawler
Пример
Давайте создадим контроллер с двумя страницами, связанными ссылкой:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
return $this->render('article/index.html.twig');
}
#[Route('/article/user', name: 'article_user')]
public function user(): Response
{
return new Response('user page');
}
}
?>
Создадим Twig-шаблон со ссылкой на вторую страницу:
<a href="{{ path('article_user') }}">user page</a>
Теперь напишем тест, в котором кликнем по ссылке
'user page' и проверим результат:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testClickLink(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$crawler = $client->clickLink('user page');
$this->assertSelectorTextContains('body', 'user page');
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Давайте найдём ссылку по атрибуту id.
Изменим Twig-шаблон:
<a id="user-link" href="{{ path('article_user') }}">go</a>
Теперь кликнем по ссылке через её id:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testClickLinkById(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$crawler = $client->clickLink('user-link');
$this->assertSelectorTextContains('body', 'user page');
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Смотрите также
-
класс
KernelBrowser,
который эмулирует браузер в тестах -
метод
click,
который имитирует клик по элементу страницы -
метод
submit,
который отправляет форму на странице -
метод
request,
который выполняет HTTP-запрос к приложению