Spec-Zone.ru › Codeception

Mezzio

Установка

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

composer require --dev codeception/module-mezzio

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

codecept init upgrade4

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

Описание

Этот модуль позволяет запускать тесты внутри Mezzio.

Использует config/container.php файл по умолчанию.

Статус

  • Поддержка: Naktibalda
  • Уровень стабильности: alpha

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

  • container - (по умолчанию: config/container.php) относительный путь к файлу, возвращающему контейнер
  • recreateApplicationBetweenTests - (по умолчанию: false) нужно ли пересоздавать всё приложение перед каждым тестом
  • recreateApplicationBetweenRequests - (по умолчанию: false) нужно ли пересоздавать всё приложение перед каждым запросом

Публичные свойства

  • application - экземпляр \Mezzio\Application
  • container - экземпляр \Interop\Container\ContainerInterface
  • client - клиент BrowserKit

Действия

_findElements

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

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

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

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

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

$editLinks = $this->getModule('Mezzio')->_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('Mezzio')->_getResponseContent(), "response contains");
}
  • return string @throws ModuleException

_loadPage

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

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

<?php
// in Helper class
public function openCheckoutFormStep2($orderId) {
    $this->getModule('Mezzio')->_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('Mezzio')->_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('Mezzio')->_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

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

Проверяет, что cookie с заданным именем отсутствует. Вы можете установить дополнительные параметры cookie, такие как 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

fillField

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

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

followRedirect

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

<?php
$I->followRedirect();

grabAttributeFrom

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

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

grabCookie

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

  • param $cookie

  • param array $params

grabFromCurrentUrl

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

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

grabMultiple

Извлекает либо текстовое содержимое, либо значения атрибутов узлов, соответствующих $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[]

grabPageSource

Извлекает исходный код текущей страницы.

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

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

grabTextFrom

Находит и возвращает текстовое содержимое заданного элемента. Если используется размытый локатор, элемент находится с помощью 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

grabValueFrom

  • param $field

  • return array|mixed|null|string

haveHttpHeader

Устанавливает 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 значение, которое нужно установить для последующих запросов

haveServerParameter

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

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

makeHtmlSnapshot

Используйте этот метод в интерактивной паузе, чтобы сохранить исходный код 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

moveBack

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

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

resetCookie

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

  • param $cookie

  • param array $params

see

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

Вы можете указать конкретный 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 необязательный параметр

seeCheckboxIsChecked

Проверяет, что указанная галочка выбрана.

<?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

seeCookie

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

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

seeCurrentUrlEquals

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

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

seeCurrentUrlMatches

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

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

seeElement

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

<?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

seeInCurrentUrl

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

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

seeInField

Проверяет, что заданное поле ввода или текстовая область равны (т. е. не просто содержат) заданному значению. Поля сопоставляются по тексту метки, атрибуту «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

seeInFormFields

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

<?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

seeInSource

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

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

seeInTitle

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

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

seeLink

Проверяет, существует ли ссылка с указанным текстом. Укажите полный 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 необязательный параметр

seeNumberOfElements

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

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

seeOptionIsSelected

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

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

seePageNotFound

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

seeResponseCodeIs

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

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

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

seeResponseCodeIsBetween

Проверяет, что код ответа находится в определенном диапазоне. В данном случае, диапазон [от <= CODE <= до]

  • param int $from
  • param int $to

seeResponseCodeIsClientError

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

seeResponseCodeIsRedirection

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

seeResponseCodeIsServerError

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

seeResponseCodeIsSuccessful

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

selectOption

Выбирает параметр в теге 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

sendAjaxGetRequest

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

  • param $uri
  • param $params

sendAjaxPostRequest

Отправляет 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

sendAjaxRequest

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

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

setCookie

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

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

setMaxRedirects

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

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

setServerParameters

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

$I->setServerParameters([]);

startFollowingRedirects

Включает автоматическое следование редиректам клиентом.

<?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», поскольку это выбранный параметр.

Чтобы снять отметку с предварительно выбранного чекбокса “рассылка”, вызовите $I->uncheckOption(['name' => 'user[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/ZendExpressive

Spec-Zone.ru

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