Spec-Zone.ru › Codeception

PhpBrowser

Установка

Если вы используете Codeception, установленный через Composer, установите этот модуль с помощью следующей команды:

composer require --dev codeception/module-phpbrowser

В качестве альтернативы, вы можете включить PhpBrowser модуль в файле конфигурации пакета и запустить

codecept init upgrade4

Этот модуль был включен в Codeception 2 и 3, но с версии 4 его необходимо устанавливать отдельно.
Некоторые модули поставляются с файлами PHAR.
Предупреждение. Использование файлов PHAR и Composer в одном проекте может привести к неожиданным ошибкам.

Описание

Использует Guzzle для взаимодействия с вашим приложением через CURL. Модуль работает через CURL и требует включённого расширения PHP CURL.

Используется для выполнения веб-приёмочных тестов с браузером без JavaScript.

В случае ошибки теста, последняя отображённая страница сохраняется в директории ‘output’.

Статус

  • Поддерживающий: davert
  • Устойчивость: стабильная
  • Контакт: codeception@codeception.com

Конфигурация

  • url обязательно - начальный URL вашего приложения
  • headers - по умолчанию заголовки устанавливаются перед каждым тестом.
  • handler (по умолчанию: curl) - обработчик Guzzle для использования. По умолчанию используется curl, также можно передать stream, или любое допустимое имя класса, как обработчик.
  • middleware - Guzzle обработчики для добавления. Требуется массив допустимых вызываемых функций.
  • curl - параметры curl
  • cookies - …
  • auth - …
  • verify - …
  • .. и другие опции запроса Guzzle

Пример (acceptance.suite.yml)

modules: enabled: - PhpBrowser: url: 'http://localhost' auth: ['admin', '123345'] curl: CURLOPT_RETURNTRANSFER: true cookies: cookie-1: Name: userName Value: john.doe cookie-2: Name: authToken Value: 1abcd2345 Domain: subdomain.domain.com Path: /admin/ Expires: 1292177455 Secure: true HttpOnly: false

Все проверки сертификатов SSL отключены по умолчанию. Используйте опции запроса Guzzle для настройки сертификатов и других параметров.

Общедоступный API

Ожидается, что эти свойства и методы будут использоваться в классах-помощниках:

Свойства:

  • guzzle - содержит экземпляр клиента Guzzle: \GuzzleHttp\Client
  • client - экземпляр Symfony BrowserKit.

Действия

_findElements

скрытый метод API, ожидается, что он будет использоваться классами-помощниками

Находит элемент, используя доступные типы локеров Codeception:

  • XPath
  • CSS
  • Строгий локер

Используйте его в помощниках или классах GroupObject или Extension:

<?php
$els = $this->getModule('PhpBrowser')->_findElements('.items');
$els = $this->getModule('PhpBrowser')->_findElements(['name' => 'username']);

$editLinks = $this->getModule('PhpBrowser')->_findElements(['link' => 'Edit']);
// now you can iterate over $editLinks and check that all them have valid hrefs

Модуль WebDriver возвращает экземпляры Facebook\WebDriver\Remote\RemoteWebElement, модули PhpBrowser и Framework возвращают экземпляры Symfony\Component\DomCrawler\Crawler

  • param $locator
  • return array интерактивных элементов

_getResponseContent

скрытый метод API, ожидается, что он будет использоваться классами-помощниками

Возвращает содержимое последнего ответа. Используйте его в помощниках, когда необходимо получить ответ запроса, выполненного другим модулем.

<?php
// in Helper class
public function seeResponseContains($text)
{
   $this->assertStringContainsString($text, $this->getModule('PhpBrowser')->_getResponseContent(), "response contains");
}
  • return string @throws ModuleException

_loadPage

скрытый метод API, ожидается, что он будет использоваться классами-помощниками

Открывает страницу с произвольными параметрами запроса. Полезно для тестирования многоэтапных форм на определённом шаге.

<?php
// in Helper class
public function openCheckoutFormStep2($orderId) {
    $this->getModule('PhpBrowser')->_loadPage('POST', '/checkout/step2', ['order' => $orderId]);
}
  • param string $method
  • param string $uri
  • param string $content

_request

скрытый метод API, ожидается, что он будет использоваться классами-помощниками

Отправляет пользовательский запрос на бэкенд, используя метод, URI, параметры и т.д. Используйте его в помощниках для создания специальных действий запроса, например, для доступа к API. Возвращает строку с телом ответа.

<?php
// in Helper class
public function createUserByApi($name) {
    $userData = $this->getModule('PhpBrowser')->_request('POST', '/api/v1/users', ['name' => $name]);
    $user = json_decode($userData);
    return $user->id;
}

Не загружает ответ в модуль, поэтому вы не можете взаимодействовать с открытой страницей (нажимать, заполнять формы). Для загрузки произвольной страницы для взаимодействия используйте метод _loadPage

  • param string $method
  • param string $uri
  • param string $content
  • return string @throws ExternalUrlException @see _loadPage

_savePageSource

скрытый метод API, ожидается, что он будет использоваться классами-помощниками

Сохраняет исходный код страницы в файл

$this->getModule('PhpBrowser')->_savePageSource(codecept_output_dir().'page.html');
  • param $filename

amHttpAuthenticated

Авторизует пользователя для HTTP_AUTH

  • param string $username
  • param string $password

amOnPage

Открывает страницу для указанного относительного URI.

<?php
// opens front page
$I->amOnPage('/');
// opens /register page
$I->amOnPage('/register');
  • param string $page

amOnSubdomain

Изменяет домен для параметра конфигурации ‘url’. Не открывает страницу; для этого используйте amOnPage.

<?php
// If config is: 'http://mysite.com'
// or config is: 'http://www.mysite.com'
// or config is: 'http://company.mysite.com'

$I->amOnSubdomain('user');
$I->amOnPage('/');
// moves to http://user.mysite.com/
?>
  • param $subdomain

amOnUrl

Открывает веб-страницу по указанному абсолютному URL и устанавливает её хост в качестве базового хоста.

<?php
$I->amOnUrl('http://codeception.com');
$I->amOnPage('/quickstart'); // moves to http://codeception.com/quickstart
?>

attachFile

Прикрепляет файл, относящийся к каталогу Codeception _data к указанному полю загрузки файла.

<?php
// file is stored in 'tests/_data/prices.xls'
$I->attachFile('input[@type="file"]', 'prices.xls');
?>
  • param $field
  • param $filename

checkOption

Отмечает чекбокс. Для радиокнопок используйте метод selectOption вместо этого.

<?php
$I->checkOption('#agree');
?>
  • param $option

click

Выполняет щелчок по ссылке или кнопке, заданной локером. Если задан размытый локер, страница будет просканирована на наличие кнопки, ссылки или изображения, соответствующего строке локера. Для кнопок ищется атрибут «value», «name» и внутренний текст. Для ссылок ищется текст ссылки. Для изображений ищется атрибут «alt» и внутренний текст любых родительских ссылок.

Второй параметр — контекст (локер CSS или XPath) для сужения поиска.

Обратите внимание, что если локер соответствует кнопке типа submit, форма будет отправлена.

<?php
// simple link
$I->click('Logout');
// button of form
$I->click('Submit');
// CSS button
$I->click('#form input[type=submit]');
// XPath
$I->click('//form/*[@type="submit"]');
// link in context
$I->click('Logout', '#nav');
// using strict locator
$I->click(['link' => 'Login']);
?>
  • param $link
  • param $context

deleteHeader

Удаляет заголовок с указанным именем. Последующие запросы не будут содержать удалённый заголовок в своём запросе.

Пример:

<?php
$I->haveHttpHeader('X-Requested-With', 'Codeception');
$I->amOnPage('test-headers.php');
// ...
$I->deleteHeader('X-Requested-With');
$I->amOnPage('some-other-page.php');
  • param string $name имя заголовка для удаления.

dontSee

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

<?php
$I->dontSee('Login');                         // I can suppose user is already logged in
$I->dontSee('Sign Up','h1');                  // I can suppose it's not a signup page
$I->dontSee('Sign Up','//body/h1');           // with XPath
$I->dontSee('Sign Up', ['css' => 'body h1']); // with strict CSS locator

Обратите внимание, что поиск выполняется после удаления всех HTML-тегов из тела, поэтому $I->dontSee('strong') потерпит неудачу со строками, такими как:

  • <p>I am Stronger than thou</p>
  • <script>document.createElement('strong');</script>

Но проигнорирует строки, такие как:

  • <strong>Home</strong>
  • <div class="strong">Home</strong>
  • <!-- strong -->

Для проверки исходного кода используйте seeInSource().

  • param string $text
  • param array|string $selector необязательно

dontSeeCheckboxIsChecked

Проверяет, что указанный чекбокс не отмечен.

<?php
$I->dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms
$I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form.
?>
  • param $checkbox

dontSeeCookie

Проверяет, что куки с данным именем отсутствует. Можно задать дополнительные параметры куки, такие как domain, path, как массив, переданный в последнем аргументе.

  • param $cookie

  • param array $params

dontSeeCurrentUrlEquals

Проверяет, что текущий URL не равен заданной строке. В отличие от dontSeeInCurrentUrl, это соответствует только полному URL.

<?php
// current url is not root
$I->dontSeeCurrentUrlEquals('/');
?>
  • param string $uri

dontSeeCurrentUrlMatches

Проверяет, что текущий URL не соответствует заданному регулярному выражению.

<?php
// to match root url
$I->dontSeeCurrentUrlMatches('~^/users/(\d+)~');
?>
  • param string $uri

dontSeeElement

Проверяет, что указанный элемент невидим или отсутствует на странице. Также можно указать ожидаемые атрибуты этого элемента.

<?php
$I->dontSeeElement('.error');
$I->dontSeeElement('//form/input[1]');
$I->dontSeeElement('input', ['name' => 'login']);
$I->dontSeeElement('input', ['value' => '123456']);
?>
  • param $selector
  • param array $attributes

dontSeeInCurrentUrl

Проверяет, что текущий URI не содержит заданную строку.

<?php
$I->dontSeeInCurrentUrl('/users/');
?>
  • param string $uri

dontSeeInField

Проверяет, что поле ввода или текстовая область не содержит указанное значение. Для размытых локеров поле соответствует по тексту метки, CSS и XPath.

<?php
$I->dontSeeInField('Body','Type your comment here');
$I->dontSeeInField('form textarea[name=body]','Type your comment here');
$I->dontSeeInField('form input[type=hidden]','hidden_value');
$I->dontSeeInField('#searchform input','Search');
$I->dontSeeInField('//form/*[@name=search]','Search');
$I->dontSeeInField(['name' => 'search'], 'Search');
?>
  • param $field
  • param $value

dontSeeInFormFields

Проверяет, что массив параметров формы (имя => значение) не задан для формы, соответствующей переданному селектору.

<?php
$I->dontSeeInFormFields('form[name=myform]', [
     'input1' => 'non-existent value',
     'input2' => 'other non-existent value',
]);
?>

Чтобы проверить, что элементу не было назначено ни одно из нескольких значений, можно передать массив в качестве значения:

<?php
$I->dontSeeInFormFields('.form-class', [
     'fieldName' => [
         'This value shouldn\'t be set',
         'And this value shouldn\'t be set',
     ],
]);
?>

Кроме того, значения чекбоксов можно проверить с помощью булевых значений.

<?php
$I->dontSeeInFormFields('#form-id', [
     'checkbox1' => true,        // fails if checked
     'checkbox2' => false,       // fails if unchecked
]);
?>
  • param $formSelector
  • param $params

dontSeeInSource

Проверяет, что текущая страница содержит указанную строку в её исходном коде.

<?php
$I->dontSeeInSource('<h1>Green eggs &amp; ham</h1>');
  • param $raw

dontSeeInTitle

Проверяет, что заголовок страницы не содержит заданной строки.

  • param $title

dontSeeLink

Проверяет, что страница не содержит ссылку с заданной строкой. Если второй параметр задан, проверяются только ссылки с совпадающим атрибутом «href».

<?php
$I->dontSeeLink('Logout'); // I suppose user is not logged in
$I->dontSeeLink('Checkout now', '/store/cart.php');
?>
  • param string $text
  • param string $url необязательно

dontSeeOptionIsSelected

Проверяет, что указанный параметр не выбран.

<?php
$I->dontSeeOptionIsSelected('#form input[name=payment]', 'Visa');
?>
  • param $selector
  • param $optionText

dontSeeResponseCodeIs

Проверяет, что код ответа равен предоставленному значению.

<?php
$I->dontSeeResponseCodeIs(200);

// recommended \Codeception\Util\HttpCode
$I->dontSeeResponseCodeIs(\Codeception\Util\HttpCode::OK);
  • param int $code

executeInGuzzle

Метод низкого уровня API. Если команды Codeception недостаточно, используйте методы Guzzle HTTP Client напрямую

Пример:

<?php
$I->executeInGuzzle(function (\GuzzleHttp\Client $client) {
     $client->get('/get', ['query' => ['foo' => 'bar']]);
});
?>

Использование этой команды не рекомендуется регулярно. Если Codeception не хватает важных методов Guzzle Client, реализуйте их и отправьте исправления.

  • param Closure $function

fillField

Заполняет текстовое поле или текстовую область заданной строкой.

<?php
$I->fillField("//input[@type='text']", "Hello World!");
$I->fillField(['name' => 'email'], 'jon@example.com');
?>
  • param $field
  • param $value

следовать за перенаправлением

Следовать за ожидаемым перенаправлением, если оно есть.

<?php
$I->followRedirect();

извлечь атрибут из

Извлекает значение заданного атрибута из заданного элемента. Возвращает ошибку, если элемент не найден.

<?php
$I->grabAttributeFrom('#tooltip', 'title');
?>
  • param $cssOrXpath
  • param $attribute

получить значение куки

Получает значение куки. Вы можете установить дополнительные параметры куки, такие как domain, path в массиве, переданном в качестве последнего аргумента. Если кука установлена запросом ajax (XMLHttpRequest), может быть задержка со стороны браузера, поэтому попробуйте $I->wait(0.1).

  • param $cookie

  • param array $params

извлечь из текущего URL

Применяет заданный регулярное выражение к текущему URI и возвращает первую подстроку. Если параметры не указаны, возвращается весь URI.

<?php
$user_id = $I->grabFromCurrentUrl('~^/user/(\d+)/~');
$uri = $I->grabFromCurrentUrl();
?>
  • param string $uri необязательно

извлечь несколько

Извлекает текстовое содержимое или значения атрибутов узлов, соответствующих $cssOrXpath, и возвращает их в виде массива.

<a href="#first">First</a>
<a href="#second">Second</a>
<a href="#third">Third</a>
<?php
// would return ['First', 'Second', 'Third']
$aLinkText = $I->grabMultiple('a');

// would return ['#first', '#second', '#third']
$aLinks = $I->grabMultiple('a', 'href');
?>
  • param $cssOrXpath
  • param $attribute
  • return string[]

получить исходный код страницы

Получает исходный код текущей страницы.

@throws ModuleException если страница не была открыта.

  • return string Исходный код текущей страницы.

получить текст из

Находит и возвращает текстовое содержимое заданного элемента. Если используется размытый локатор, элемент находится с помощью CSS, XPath и путем сопоставления всего исходного кода страницы с регулярным выражением.

<?php
$heading = $I->grabTextFrom('h1');
$heading = $I->grabTextFrom('descendant-or-self::h1');
$value = $I->grabTextFrom('~<input value=(.*?)]~sgi'); // match with a regex
?>
  • param $cssOrXPathOrRegex

получить значение из

  • param $field

  • return array|mixed|null|string

иметь HTTP заголовок

Устанавливает HTTP-заголовок в переданное значение — используется в последующих HTTP-запросах через PhpBrowser.

Пример:

<?php
$I->haveHttpHeader('X-Requested-With', 'Codeception');
$I->amOnPage('test-headers.php');

Для использования специальных символов в ключе заголовка используйте HTML-символьные сущности: Пример: Заголовок с символом подчеркивания — ‘Client_Id’ должен быть представлен как — ‘Client_Id’ или ‘Client_Id’

<?php
$I->haveHttpHeader('Client&#95;Id', 'Codeception');
  • param string $name имя запрошенного заголовка
  • param string $value значение, в которое он устанавливается для последующих запросов

иметь параметр сервера

Устанавливает параметр SERVER, действительный для всех последующих запросов.

$I->haveServerParameter('name', 'value');
  • param string $name
  • param string $value

создать снимок HTML

Используйте этот метод в интерактивной паузе, чтобы сохранить исходный код HTML текущей страницы.

<?php
$I->makeHtmlSnapshot('edit_page');
// saved to: tests/_output/debug/edit_page.html
$I->makeHtmlSnapshot();
// saved to: tests/_output/debug/2017-05-26_14-24-11_4b3403665fea6.html
  • param null $name

назад

Перемещает назад в истории.

  • param int $numberOfSteps (значение по умолчанию 1)

обновить куки

Сбрасывает куки с заданным именем. Вы можете установить дополнительные параметры куки, такие как domain, path в массиве, переданном в качестве последнего аргумента.

  • param $cookie

  • param array $params

проверить

Проверяет, содержит ли текущая страница заданную строку (регистронезависимо).

Вы можете указать конкретный HTML-элемент (через CSS или XPath) как второй параметр, чтобы искать только внутри этого элемента.

<?php
$I->see('Logout');                        // I can suppose user is logged in
$I->see('Sign Up', 'h1');                 // I can suppose it's a signup page
$I->see('Sign Up', '//body/h1');          // with XPath
$I->see('Sign Up', ['css' => 'body h1']); // with strict CSS locator

Обратите внимание, что поиск выполняется после удаления всех HTML-тегов из тела, поэтому $I->see('strong') вернет true для строк, таких как:

  • <p>I am Stronger than thou</p>
  • <script>document.createElement('strong');</script>

Но не будет true для строк, таких как:

  • <strong>Home</strong>
  • <div class="strong">Home</strong>
  • <!-- strong -->

Для проверки исходного кода используйте seeInSource().

  • param string $text
  • param array|string $selector необязательно

проверить, что чекбокс отмечен

Проверяет, что указанный чекбокс отмечен.

<?php
$I->seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms
$I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form.
$I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]');
?>
  • param $checkbox

проверить куки

Проверяет, установлена ли кука с данным именем. Вы можете установить дополнительные параметры куки, такие как domain, path в виде массива, переданного в последнем аргументе.

<?php
$I->seeCookie('PHPSESSID');
?>
  • param $cookie
  • param array $params

проверить, что текущий URL равен

Проверяет, равен ли текущий URL заданной строке. В отличие от seeInCurrentUrl, это соответствует только полному URL.

<?php
// to match root url
$I->seeCurrentUrlEquals('/');
?>
  • param string $uri

проверить, что текущий URL соответствует

Проверяет, соответствует ли текущий URL заданному регулярному выражению.

<?php
// to match root url
$I->seeCurrentUrlMatches('~^/users/(\d+)~');
?>
  • param string $uri

проверить элемент

Проверяет, существует ли заданный элемент на странице и является ли он видимым. Вы также можете указать ожидаемые атрибуты этого элемента.

<?php
$I->seeElement('.error');
$I->seeElement('//form/input[1]');
$I->seeElement('input', ['name' => 'login']);
$I->seeElement('input', ['value' => '123456']);

// strict locator in first arg, attributes in second
$I->seeElement(['css' => 'form input'], ['name' => 'login']);
?>
  • param $selector
  • param array $attributes

проверить в текущем URL

Проверяет, содержит ли текущий URI заданную строку.

<?php
// to match: /home/dashboard
$I->seeInCurrentUrl('home');
// to match: /users/1
$I->seeInCurrentUrl('/users/');
?>
  • param string $uri

проверить в поле

Проверяет, что заданное поле ввода или текстовое поле равно (т. е. не просто содержит) заданное значение. Поля сопоставляются по тексту метки, атрибуту «name», CSS или XPath.

<?php
$I->seeInField('Body','Type your comment here');
$I->seeInField('form textarea[name=body]','Type your comment here');
$I->seeInField('form input[type=hidden]','hidden_value');
$I->seeInField('#searchform input','Search');
$I->seeInField('//form/*[@name=search]','Search');
$I->seeInField(['name' => 'search'], 'Search');
?>
  • param $field
  • param $value

проверить в полях формы

Проверяет, установлены ли массив параметров формы (имя => значение) в форме, соответствующей переданному селектору.

<?php
$I->seeInFormFields('form[name=myform]', [
     'input1' => 'value',
     'input2' => 'other value',
]);
?>

Для элементов с множественным выбором или для проверки значений нескольких элементов с одинаковым именем можно передать массив:

<?php
$I->seeInFormFields('.form-class', [
     'multiselect' => [
         'value1',
         'value2',
     ],
     'checkbox[]' => [
         'a checked value',
         'another checked value',
     ],
]);
?>

Кроме того, значения чекбоксов можно проверить с помощью булевых значений.

<?php
$I->seeInFormFields('#form-id', [
     'checkbox1' => true,        // passes if checked
     'checkbox2' => false,       // passes if unchecked
]);
?>

Сочетайте это с submitForm для быстрой проверки.

<?php
$form = [
     'field1' => 'value',
     'field2' => 'another value',
     'checkbox1' => true,
     // ...
];
$I->submitForm('//form[@id=my-form]', $form, 'submitButton');
// $I->amOnPage('/path/to/form-page') may be needed
$I->seeInFormFields('//form[@id=my-form]', $form);
?>
  • param $formSelector
  • param $params

проверить в исходном коде

Проверяет, содержит ли текущая страница заданную строку в своем исходном коде.

<?php
$I->seeInSource('<h1>Green eggs &amp; ham</h1>');
  • param $raw

проверить в заголовке

Проверяет, содержит ли заголовок страницы заданную строку.

<?php
$I->seeInTitle('Blog - Post #1');
?>
  • param $title

проверить ссылку

Проверяет, есть ли ссылка с указанным текстом. Укажите полный URL как второй параметр, чтобы сопоставить ссылки с этим точным URL.

<?php
$I->seeLink('Logout'); // matches <a href="#">Logout</a>
$I->seeLink('Logout','/logout'); // matches <a href="/logout">Logout</a>
?>
  • param string $text
  • param string $url необязательно

проверить количество элементов

Проверяет, что на странице есть определенное количество элементов, соответствующих заданному локатору.

<?php
$I->seeNumberOfElements('tr', 10);
$I->seeNumberOfElements('tr', [0,10]); // between 0 and 10 elements
?>
  • param $selector
  • param mixed $expected int или int[]

проверить, что опция выбрана

Проверяет, что указанная опция выбрана.

<?php
$I->seeOptionIsSelected('#form input[name=payment]', 'Visa');
?>
  • param $selector
  • param $optionText

проверить, что страница не найдена

Утверждает, что текущая страница имеет код ответа 404.

проверить, что код ответа равен

Проверяет, что код ответа равен предоставленному значению.

<?php
$I->seeResponseCodeIs(200);

// recommended \Codeception\Util\HttpCode
$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK);
  • param int $code

проверить, что код ответа находится в диапазоне

Проверяет, что код ответа находится в определенном диапазоне. Между фактически означает [от <= КОД <= до]

  • param int $from
  • param int $to

проверить, что код ответа — ошибка клиента

Проверяет, что код ответа — 4xx

проверить, что код ответа — перенаправление

Проверяет, что код ответа 3xx

проверить, что код ответа — ошибка сервера

Проверяет, что код ответа — 5xx

проверить, что код ответа — успешный

Проверяет, что код ответа 2xx

выбрать опцию

Выбирает опцию в теге select или в группе радиокнопок.

<?php
$I->selectOption('form select[name=account]', 'Premium');
$I->selectOption('form input[name=payment]', 'Monthly');
$I->selectOption('//form/select[@name=account]', 'Monthly');
?>

Передайте массив для второго аргумента, чтобы выбрать несколько опций:

<?php
$I->selectOption('Which OS do you use?', array('Windows','Linux'));
?>

Или передайте ассоциативный массив для второго аргумента, чтобы конкретно определить метод выбора:

<?php
$I->selectOption('Which OS do you use?', array('text' => 'Windows')); // Only search by text 'Windows'
$I->selectOption('Which OS do you use?', array('value' => 'windows')); // Only search by value 'windows'
?>
  • param $select
  • param $option

отправить ajax запрос GET

Отправляет ajax запрос GET с переданными параметрами. См. sendAjaxPostRequest()

  • param $uri
  • param $params

отправить ajax запрос POST

Отправляет ajax запрос POST с переданными параметрами. Соответствующий HTTP-заголовок добавляется автоматически: X-Requested-With: XMLHttpRequest Пример:

<?php
$I->sendAjaxPostRequest('/add-task', ['task' => 'lorem ipsum']);

Некоторые фреймворки (например, Symfony) создают имена полей в виде «массива»: <input type="text" name="form[task]"> В этом случае вам нужно передать поля так:

<?php
$I->sendAjaxPostRequest('/add-task', ['form' => [
    'task' => 'lorem ipsum',
    'category' => 'miscellaneous',
]]);
  • param string $uri
  • param array $params

отправить ajax запрос

Отправляет ajax запрос с указанным HTTP-методом. См. sendAjaxPostRequest() Пример:

<?php
$I->sendAjaxRequest('PUT', '/posts/7', ['title' => 'new title']);
  • param $method
  • param $uri
  • param array $params

установить куки

Устанавливает куки с заданным именем и значением. Вы можете установить дополнительные параметры куки, такие как domain, path, expires, secure в массиве, переданном в качестве последнего аргумента.

<?php
$I->setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3');
?>
  • param $name
  • param $val
  • param array $params

установить заголовок

Псевдоним к haveHttpHeader

  • param $name
  • param $value

установить максимальное количество перенаправлений

Устанавливает максимальное количество перенаправлений, которые может следовать Клиент.

<?php
$I->setMaxRedirects(2);
  • param int $maxRedirects

установить параметры сервера

Устанавливает параметры SERVER, действительные для всех последующих запросов. Это удалит старые.

$I->setServerParameters([]);

начать отслеживание перенаправлений

Включает автоматическое перенаправление, которое должно следовать клиенту.

<?php
$I->startFollowingRedirects();

stopFollowingRedirects

Препятствует автоматическому перенаправлению, которое должно следовать клиенту.

<?php
$I->stopFollowingRedirects();

submitForm

Отправляет заданную форму на странице с заданными значениями формы. Передайте значения поля формы в виде массива во втором параметре.

Хотя эта функция может использоваться как сокращенная версия fillField(), selectOption(), click() и т. д., она имеет некоторые важные отличия:

  • Могут использоваться только имена полей, а не CSS/XPath-селекторы или метки полей.
  • Если в эту функцию передано поле, которого нет на странице, оно будет безмолвно добавлено в HTTP-запрос. Это полезно для тестирования некоторых типов форм, но имейте в виду, что вы не получите исключение, как если бы вы вызвали fillField() или selectOption() с отсутствующим полем.

Поля, которые не предоставлены, будут заполнены их значениями со страницы или из предыдущих вызовов fillField(), selectOption() и т. д. Вам не нужно нажимать кнопку «Отправить» после этого. Эта команда сама запускает запрос на действие формы.

Вы можете необязательно указать, значение какой кнопки включить в запрос, используя последний параметр (в качестве альтернативы явным установлением его значения во втором параметре), так как значения кнопок не включаются в запрос иначе.

Примеры:

<?php
$I->submitForm('#login', [
    'login' => 'davert',
    'password' => '123456'
]);
// or
$I->submitForm('#login', [
    'login' => 'davert',
    'password' => '123456'
], 'submitButtonName');

Например, вот пример формы «Регистрация»:

<form id="userForm">
    Login:
    <input type="text" name="user[login]" /><br/>
    Password:
    <input type="password" name="user[password]" /><br/>
    Do you agree to our terms?
    <input type="checkbox" name="user[agree]" /><br/>
    Subscribe to our newsletter?
    <input type="checkbox" name="user[newsletter]" value="1" checked="checked" /><br/>
    Select pricing plan:
    <select name="plan">
        <option value="1">Free</option>
        <option value="2" selected="selected">Paid</option>
    </select>
    <input type="submit" name="submitButton" value="Submit" />
</form>

Вы могли бы написать следующее для её отправки:

<?php
$I->submitForm(
    '#userForm',
    [
        'user' => [
            'login' => 'Davert',
            'password' => '123456',
            'agree' => true
        ]
    ],
    'submitButton'
);

Обратите внимание, что «2» будет отправленным значением для поля «plan», так как это выбранный вариант.

Чтобы снять отметку с предварительно отмеченной галочки «newsletter», вызовите $I->uncheckOption(['name' => 'user[newsletter]']); перед этим, а затем отправьте форму, как показано здесь (т. е. без поля «newsletter» в массиве $params).

Вы также можете смоделировать отправку JavaScript, не указывая никаких кнопок в третьем параметре функции submitForm.

<?php
$I->submitForm(
    '#userForm',
    [
        'user' => [
            'login' => 'Davert',
            'password' => '123456',
            'agree' => true
        ]
    ]
);

Эта функция хорошо работает в паре с seeInFormFields() для быстрого тестирования интерфейсов CRUD и логики проверки форм.

<?php
$form = [
     'field1' => 'value',
     'field2' => 'another value',
     'checkbox1' => true,
     // ...
];
$I->submitForm('#my-form', $form, 'submitButton');
// $I->amOnPage('/path/to/form-page') may be needed
$I->seeInFormFields('#my-form', $form);

Значения параметров могут быть установлены в массивы для нескольких входных полей с одинаковым именем или многовыборных комбинированных полей. Для флажков вы можете использовать либо строковое значение, либо булево значение true/false, которое будет заменено значением флажка в DOM.

<?php
$I->submitForm('#my-form', [
     'field1' => 'value',
     'checkbox' => [
         'value of first checkbox',
         'value of second checkbox',
     ],
     'otherCheckboxes' => [
         true,
         false,
         false
     ],
     'multiselect' => [
         'first option value',
         'second option value'
     ]
]);

Смешивание строковых и булевых значений для значения флажка не поддерживается и может привести к неожиданным результатам.

Имена полей, заканчивающиеся на [] , должны передаваться без заключительных квадратных скобок и должны содержать массив для своего значения. Это позволяет отправлять несколько значений с одинаковым именем, рассмотрите:

<?php
// This will NOT work correctly
$I->submitForm('#my-form', [
    'field[]' => 'value',
    'field[]' => 'another value',  // 'field[]' is already a defined key
]);

Решение — передать значение в виде массива:

<?php
// This way both values are submitted
$I->submitForm('#my-form', [
    'field' => [
        'value',
        'another value',
    ]
]);
  • param $selector
  • param $params
  • param $button

switchToIframe

Переключение на iframe или фрейм на странице.

Пример:

<iframe name="another_frame" src="http://example.com">
<?php
# switch to iframe
$I->switchToIframe("another_frame");
  • param string $name

uncheckOption

Снимает отметку с флажка.

<?php
$I->uncheckOption('#notify');
?>
  • param $option

© 2011 Michael Bodnarchuk and contributors
Licensed under the MIT License.
https://codeception.com/docs/modules/PhpBrowser

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API