diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 995f6c7..0e8081c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - php: [5.6, 7.0, 7.1, 7.2, 7.3, 7.4] + php: [5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0] steps: - name: Checkout code diff --git a/Robofile.php b/Robofile.php deleted file mode 100644 index beb85be..0000000 --- a/Robofile.php +++ /dev/null @@ -1,21 +0,0 @@ - 

Module reference is taken from the source code. Help us to improve documentation. Edit module reference
'; - $documentationFile = 'documentation.md'; - $this->generateDocumentationForClass($className, $documentationFile, $sourceMessage); - } -} \ No newline at end of file diff --git a/composer.json b/composer.json index 60325ea..236406e 100644 --- a/composer.json +++ b/composer.json @@ -15,14 +15,13 @@ ], "minimum-stability": "RC", "require": { - "php": ">=5.6.0 <8.0", - "guzzlehttp/guzzle": "^6.3.0|^7.0.0", - "codeception/lib-innerbrowser": "^1.3.2", - "codeception/codeception": "*@dev" + "php": ">=5.6.0 <9.0", + "guzzlehttp/guzzle": "^6.3|^7.0", + "codeception/lib-innerbrowser": "^1.3", + "codeception/codeception": "^4.0" }, "require-dev": { - "codeception/util-robohelpers": "dev-master", - "codeception/module-rest": "dev-master | ^1.0" + "codeception/module-rest": "^1.0" }, "conflict": { "codeception/codeception": "<4.0" diff --git a/documentation.md b/documentation.md deleted file mode 100644 index fc3dd40..0000000 --- a/documentation.md +++ /dev/null @@ -1,1413 +0,0 @@ -# PhpBrowser - - -Uses [Guzzle](http://guzzlephp.org/) to interact with your application over CURL. -Module works over CURL and requires **PHP CURL extension** to be enabled. - -Use to perform web acceptance tests with non-javascript browser. - -If test fails stores last shown page in 'output' dir. - -## Status - -* Maintainer: **davert** -* Stability: **stable** -* Contact: codeception@codeception.com - - -## Configuration - -* url *required* - start url of your app -* headers - default headers are set before each test. -* handler (default: curl) - Guzzle handler to use. By default curl is used, also possible to pass `stream`, or any valid class name as [Handler](http://docs.guzzlephp.org/en/latest/handlers-and-middleware.html#handlers). -* middleware - Guzzle middlewares to add. An array of valid callables is required. -* curl - curl options -* cookies - ... -* auth - ... -* verify - ... -* .. those and other [Guzzle Request options](http://docs.guzzlephp.org/en/latest/request-options.html) - - -### Example (`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 - - -All SSL certification checks are disabled by default. -Use Guzzle request options to configure certifications and others. - -## Public API - -Those properties and methods are expected to be used in Helper classes: - -Properties: - -* `guzzle` - contains [Guzzle](http://guzzlephp.org/) client instance: `\GuzzleHttp\Client` -* `client` - Symfony BrowserKit instance. - - -## Actions - -### _findElements - -*hidden API method, expected to be used from Helper classes* - -Locates element using available Codeception locator types: - -* XPath -* CSS -* Strict Locator - -Use it in Helpers or GroupObject or Extension classes: - -```php -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 module returns `Facebook\WebDriver\Remote\RemoteWebElement` instances -PhpBrowser and Framework modules return `Symfony\Component\DomCrawler\Crawler` instances - - * `param` $locator - * `return` array of interactive elements - - -### _getResponseContent - -*hidden API method, expected to be used from Helper classes* - -Returns content of the last response -Use it in Helpers when you want to retrieve response of request performed by another module. - -```php -assertStringContainsString($text, $this->getModule('PhpBrowser')->_getResponseContent(), "response contains"); -} -?> -``` - - * `return` string -@throws ModuleException - - -### _loadPage - -*hidden API method, expected to be used from Helper classes* - -Opens a page with arbitrary request parameters. -Useful for testing multi-step forms on a specific step. - -```php -getModule('PhpBrowser')->_loadPage('POST', '/checkout/step2', ['order' => $orderId]); -} -?> -``` - - * `param` $method - * `param` $uri - * `param array` $parameters - * `param array` $files - * `param array` $server - * `param null` $content - - -### _request - -*hidden API method, expected to be used from Helper classes* - -Send custom request to a backend using method, uri, parameters, etc. -Use it in Helpers to create special request actions, like accessing API -Returns a string with response body. - -```php -getModule('PhpBrowser')->_request('POST', '/api/v1/users', ['name' => $name]); - $user = json_decode($userData); - return $user->id; -} -?> -``` -Does not load the response into the module so you can't interact with response page (click, fill forms). -To load arbitrary page for interaction, use `_loadPage` method. - - * `param` $method - * `param` $uri - * `param array` $parameters - * `param array` $files - * `param array` $server - * `param null` $content - * `return` mixed|Crawler -@throws ExternalUrlException -@see `_loadPage` - - -### _savePageSource - -*hidden API method, expected to be used from Helper classes* - -Saves page source of to a file - -```php -$this->getModule('PhpBrowser')->_savePageSource(codecept_output_dir().'page.html'); -``` - * `param` $filename - - -### amHttpAuthenticated - -Authenticates user for HTTP_AUTH - - * `param` $username - * `param` $password - - -### amOnPage - -Opens the page for the given relative URI. - -``` php -amOnPage('/'); -// opens /register page -$I->amOnPage('/register'); -``` - - * `param string` $page - - -### amOnSubdomain - -Changes the subdomain for the 'url' configuration parameter. -Does not open a page; use `amOnPage` for that. - -``` php -amOnSubdomain('user'); -$I->amOnPage('/'); -// moves to http://user.mysite.com/ -?> -``` - - * `param` $subdomain - - - -### amOnUrl - -Open web page at the given absolute URL and sets its hostname as the base host. - -``` php -amOnUrl('http://codeception.com'); -$I->amOnPage('/quickstart'); // moves to http://codeception.com/quickstart -?> -``` - - -### attachFile - -Attaches a file relative to the Codeception `_data` directory to the given file upload field. - -``` php -attachFile('input[@type="file"]', 'prices.xls'); -?> -``` - - * `param` $field - * `param` $filename - - -### checkOption - -Ticks a checkbox. For radio buttons, use the `selectOption` method instead. - -``` php -checkOption('#agree'); -?> -``` - - * `param` $option - - -### click - -Perform a click on a link or a button, given by a locator. -If a fuzzy locator is given, the page will be searched for a button, link, or image matching the locator string. -For buttons, the "value" attribute, "name" attribute, and inner text are searched. -For links, the link text is searched. -For images, the "alt" attribute and inner text of any parent links are searched. - -The second parameter is a context (CSS or XPath locator) to narrow the search. - -Note that if the locator matches a button of type `submit`, the form will be submitted. - -``` php -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 - -Deletes the header with the passed name. Subsequent requests -will not have the deleted header in its request. - -Example: -```php -haveHttpHeader('X-Requested-With', 'Codeception'); -$I->amOnPage('test-headers.php'); -// ... -$I->deleteHeader('X-Requested-With'); -$I->amOnPage('some-other-page.php'); -?> -``` - - * `param string` $name the name of the header to delete. - - -### dontSee - -Checks that the current page doesn't contain the text specified (case insensitive). -Give a locator as the second parameter to match a specific region. - -```php -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 -``` - -Note that the search is done after stripping all HTML tags from the body, -so `$I->dontSee('strong')` will fail on strings like: - - - `

I am Stronger than thou

` - - `` - -But will ignore strings like: - - - `Home` - - `
Home` - - `` - -For checking the raw source code, use `seeInSource()`. - - * `param string` $text - * `param array|string` $selector optional - - -### dontSeeCheckboxIsChecked - -Check that the specified checkbox is unchecked. - -``` php -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 - -Checks that there isn't a cookie with the given name. -You can set additional cookie params like `domain`, `path` as array passed in last argument. - - * `param` $cookie - - * `param array` $params - - -### dontSeeCurrentUrlEquals - -Checks that the current URL doesn't equal the given string. -Unlike `dontSeeInCurrentUrl`, this only matches the full URL. - -``` php -dontSeeCurrentUrlEquals('/'); -?> -``` - - * `param string` $uri - - -### dontSeeCurrentUrlMatches - -Checks that current url doesn't match the given regular expression. - -``` php -dontSeeCurrentUrlMatches('~^/users/(\d+)~'); -?> -``` - - * `param string` $uri - - -### dontSeeElement - -Checks that the given element is invisible or not present on the page. -You can also specify expected attributes of this element. - -``` php -dontSeeElement('.error'); -$I->dontSeeElement('//form/input[1]'); -$I->dontSeeElement('input', ['name' => 'login']); -$I->dontSeeElement('input', ['value' => '123456']); -?> -``` - - * `param` $selector - * `param array` $attributes - - -### dontSeeInCurrentUrl - -Checks that the current URI doesn't contain the given string. - -``` php -dontSeeInCurrentUrl('/users/'); -?> -``` - - * `param string` $uri - - -### dontSeeInField - -Checks that an input field or textarea doesn't contain the given value. -For fuzzy locators, the field is matched by label text, CSS and XPath. - -``` php -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 - -Checks if the array of form parameters (name => value) are not set on the form matched with -the passed selector. - -``` php -dontSeeInFormFields('form[name=myform]', [ - 'input1' => 'non-existent value', - 'input2' => 'other non-existent value', -]); -?> -``` - -To check that an element hasn't been assigned any one of many values, an array can be passed -as the value: - -``` php -dontSeeInFormFields('.form-class', [ - 'fieldName' => [ - 'This value shouldn\'t be set', - 'And this value shouldn\'t be set', - ], -]); -?> -``` - -Additionally, checkbox values can be checked with a boolean. - -``` php -dontSeeInFormFields('#form-id', [ - 'checkbox1' => true, // fails if checked - 'checkbox2' => false, // fails if unchecked -]); -?> -``` - - * `param` $formSelector - * `param` $params - - -### dontSeeInSource - -Checks that the current page contains the given string in its -raw source code. - -```php -dontSeeInSource('

Green eggs & ham

'); -``` - - * `param` $raw - - -### dontSeeInTitle - -Checks that the page title does not contain the given string. - - * `param` $title - - - -### dontSeeLink - -Checks that the page doesn't contain a link with the given string. -If the second parameter is given, only links with a matching "href" attribute will be checked. - -``` php -dontSeeLink('Logout'); // I suppose user is not logged in -$I->dontSeeLink('Checkout now', '/store/cart.php'); -?> -``` - - * `param string` $text - * `param string` $url optional - - -### dontSeeOptionIsSelected - -Checks that the given option is not selected. - -``` php -dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); -?> -``` - - * `param` $selector - * `param` $optionText - - - -### dontSeeResponseCodeIs - -Checks that response code is equal to value provided. - -```php -dontSeeResponseCodeIs(200); - -// recommended \Codeception\Util\HttpCode -$I->dontSeeResponseCodeIs(\Codeception\Util\HttpCode::OK); -``` - * `param` $code - - -### executeInGuzzle - -Low-level API method. -If Codeception commands are not enough, use [Guzzle HTTP Client](http://guzzlephp.org/) methods directly - -Example: - -``` php -executeInGuzzle(function (\GuzzleHttp\Client $client) { - $client->get('/get', ['query' => ['foo' => 'bar']]); -}); -?> -``` - -It is not recommended to use this command on a regular basis. -If Codeception lacks important Guzzle Client methods, implement them and submit patches. - - * `param callable` $function - - -### fillField - -Fills a text field or textarea with the given string. - -``` php -fillField("//input[@type='text']", "Hello World!"); -$I->fillField(['name' => 'email'], 'jon@mail.com'); -?> -``` - - * `param` $field - * `param` $value - - -### grabAttributeFrom - -Grabs the value of the given attribute value from the given element. -Fails if element is not found. - -``` php -grabAttributeFrom('#tooltip', 'title'); -?> -``` - - * `param` $cssOrXpath - * `param` $attribute - - - -### grabCookie - -Grabs a cookie value. -You can set additional cookie params like `domain`, `path` in array passed as last argument. - - * `param` $cookie - - * `param array` $params - - -### grabFromCurrentUrl - -Executes the given regular expression against the current URI and returns the first capturing group. -If no parameters are provided, the full URI is returned. - -``` php -grabFromCurrentUrl('~^/user/(\d+)/~'); -$uri = $I->grabFromCurrentUrl(); -?> -``` - - * `param string` $uri optional - - - -### grabMultiple - -Grabs either the text content, or attribute values, of nodes -matched by $cssOrXpath and returns them as an array. - -```html -First -Second -Third -``` - -```php -grabMultiple('a'); - -// would return ['#first', '#second', '#third'] -$aLinks = $I->grabMultiple('a', 'href'); -?> -``` - - * `param` $cssOrXpath - * `param` $attribute - * `return` string[] - - -### grabPageSource - -Grabs current page source code. - -@throws ModuleException if no page was opened. - - * `return` string Current page source code. - - -### grabTextFrom - -Finds and returns the text contents of the given element. -If a fuzzy locator is used, the element is found using CSS, XPath, -and by matching the full page source by regular expression. - -``` php -grabTextFrom('h1'); -$heading = $I->grabTextFrom('descendant-or-self::h1'); -$value = $I->grabTextFrom('~ -``` - - * `param` $cssOrXPathOrRegex - - - -### grabValueFrom - - * `param` $field - - * `return` array|mixed|null|string - - -### haveHttpHeader - -Sets the HTTP header to the passed value - which is used on -subsequent HTTP requests through PhpBrowser. - -Example: -```php -haveHttpHeader('X-Requested-With', 'Codeception'); -$I->amOnPage('test-headers.php'); -?> -``` - -To use special chars in Header Key use HTML Character Entities: -Example: -Header with underscore - 'Client_Id' -should be represented as - 'Client_Id' or 'Client_Id' - -```php -haveHttpHeader('Client_Id', 'Codeception'); -?> -``` - - * `param string` $name the name of the request header - * `param string` $value the value to set it to for subsequent - requests - - -### makeHtmlSnapshot - -Saves current page's HTML into a temprary file. -Use this method in debug mode within an interactive pause to get a source code of current page. - -```php -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 - -Moves back in history. - - * `param int` $numberOfSteps (default value 1) - - -### resetCookie - -Unsets cookie with the given name. -You can set additional cookie params like `domain`, `path` in array passed as last argument. - - * `param` $cookie - - * `param array` $params - - -### see - -Checks that the current page contains the given string (case insensitive). - -You can specify a specific HTML element (via CSS or XPath) as the second -parameter to only search within that element. - -``` php -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 -``` - -Note that the search is done after stripping all HTML tags from the body, -so `$I->see('strong')` will return true for strings like: - - - `

I am Stronger than thou

` - - `` - -But will *not* be true for strings like: - - - `Home` - - `
Home` - - `` - -For checking the raw source code, use `seeInSource()`. - - * `param string` $text - * `param array|string` $selector optional - - -### seeCheckboxIsChecked - -Checks that the specified checkbox is checked. - -``` php -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 - -Checks that a cookie with the given name is set. -You can set additional cookie params like `domain`, `path` as array passed in last argument. - -``` php -seeCookie('PHPSESSID'); -?> -``` - - * `param` $cookie - * `param array` $params - - -### seeCurrentUrlEquals - -Checks that the current URL is equal to the given string. -Unlike `seeInCurrentUrl`, this only matches the full URL. - -``` php -seeCurrentUrlEquals('/'); -?> -``` - - * `param string` $uri - - -### seeCurrentUrlMatches - -Checks that the current URL matches the given regular expression. - -``` php -seeCurrentUrlMatches('~^/users/(\d+)~'); -?> -``` - - * `param string` $uri - - -### seeElement - -Checks that the given element exists on the page and is visible. -You can also specify expected attributes of this element. - -``` php -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 -@return - - -### seeInCurrentUrl - -Checks that current URI contains the given string. - -``` php -seeInCurrentUrl('home'); -// to match: /users/1 -$I->seeInCurrentUrl('/users/'); -?> -``` - - * `param string` $uri - - -### seeInField - -Checks that the given input field or textarea *equals* (i.e. not just contains) the given value. -Fields are matched by label text, the "name" attribute, CSS, or XPath. - -``` php -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 - -Checks if the array of form parameters (name => value) are set on the form matched with the -passed selector. - -``` php -seeInFormFields('form[name=myform]', [ - 'input1' => 'value', - 'input2' => 'other value', -]); -?> -``` - -For multi-select elements, or to check values of multiple elements with the same name, an -array may be passed: - -``` php -seeInFormFields('.form-class', [ - 'multiselect' => [ - 'value1', - 'value2', - ], - 'checkbox[]' => [ - 'a checked value', - 'another checked value', - ], -]); -?> -``` - -Additionally, checkbox values can be checked with a boolean. - -``` php -seeInFormFields('#form-id', [ - 'checkbox1' => true, // passes if checked - 'checkbox2' => false, // passes if unchecked -]); -?> -``` - -Pair this with submitForm for quick testing magic. - -``` php - '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 - -Checks that the current page contains the given string in its -raw source code. - -``` php -seeInSource('

Green eggs & ham

'); -``` - - * `param` $raw - - -### seeInTitle - -Checks that the page title contains the given string. - -``` php -seeInTitle('Blog - Post #1'); -?> -``` - - * `param` $title - - - -### seeLink - -Checks that there's a link with the specified text. -Give a full URL as the second parameter to match links with that exact URL. - -``` php -seeLink('Logout'); // matches Logout -$I->seeLink('Logout','/logout'); // matches Logout -?> -``` - - * `param string` $text - * `param string` $url optional - - -### seeNumberOfElements - -Checks that there are a certain number of elements matched by the given locator on the page. - -``` php -seeNumberOfElements('tr', 10); -$I->seeNumberOfElements('tr', [0,10]); // between 0 and 10 elements -?> -``` - * `param` $selector - * `param mixed` $expected int or int[] - - -### seeOptionIsSelected - -Checks that the given option is selected. - -``` php -seeOptionIsSelected('#form input[name=payment]', 'Visa'); -?> -``` - - * `param` $selector - * `param` $optionText - - - -### seePageNotFound - -Asserts that current page has 404 response status code. - - -### seeResponseCodeIs - -Checks that response code is equal to value provided. - -```php -seeResponseCodeIs(200); - -// recommended \Codeception\Util\HttpCode -$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); -``` - - * `param` $code - - -### seeResponseCodeIsBetween - -Checks that response code is between a certain range. Between actually means [from <= CODE <= to] - - * `param` $from - * `param` $to - - -### seeResponseCodeIsClientError - -Checks that the response code is 4xx - - -### seeResponseCodeIsRedirection - -Checks that the response code 3xx - - -### seeResponseCodeIsServerError - -Checks that the response code is 5xx - - -### seeResponseCodeIsSuccessful - -Checks that the response code 2xx - - -### selectOption - -Selects an option in a select tag or in radio button group. - -``` php -selectOption('form select[name=account]', 'Premium'); -$I->selectOption('form input[name=payment]', 'Monthly'); -$I->selectOption('//form/select[@name=account]', 'Monthly'); -?> -``` - -Provide an array for the second argument to select multiple options: - -``` php -selectOption('Which OS do you use?', array('Windows','Linux')); -?> -``` - -Or provide an associative array for the second argument to specifically define which selection method should be used: - -``` php -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 - -If your page triggers an ajax request, you can perform it manually. -This action sends a GET ajax request with specified params. - -See ->sendAjaxPostRequest for examples. - - * `param` $uri - * `param` $params - - -### sendAjaxPostRequest - -If your page triggers an ajax request, you can perform it manually. -This action sends a POST ajax request with specified params. -Additional params can be passed as array. - -Example: - -Imagine that by clicking checkbox you trigger ajax request which updates user settings. -We emulate that click by running this ajax request manually. - -``` php -sendAjaxPostRequest('/updateSettings', array('notifications' => true)); // POST -$I->sendAjaxGetRequest('/updateSettings', array('notifications' => true)); // GET - -``` - - * `param` $uri - * `param` $params - - -### sendAjaxRequest - -If your page triggers an ajax request, you can perform it manually. -This action sends an ajax request with specified method and params. - -Example: - -You need to perform an ajax request specifying the HTTP method. - -``` php -sendAjaxRequest('PUT', '/posts/7', array('title' => 'new title')); - -``` - - * `param` $method - * `param` $uri - * `param` $params - - -### setCookie - -Sets a cookie with the given name and value. -You can set additional cookie params like `domain`, `path`, `expires`, `secure` in array passed as last argument. - -``` php -setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3'); -?> -``` - - * `param` $name - * `param` $val - * `param array` $params - - - -### setHeader - -Alias to `haveHttpHeader` - - * `param` $name - * `param` $value - - -### submitForm - -Submits the given form on the page, with the given form -values. Pass the form field's values as an array in the second -parameter. - -Although this function can be used as a short-hand version of -`fillField()`, `selectOption()`, `click()` etc. it has some important -differences: - - * Only field *names* may be used, not CSS/XPath selectors nor field labels - * If a field is sent to this function that does *not* exist on the page, - it will silently be added to the HTTP request. This is helpful for testing - some types of forms, but be aware that you will *not* get an exception - like you would if you called `fillField()` or `selectOption()` with - a missing field. - -Fields that are not provided will be filled by their values from the page, -or from any previous calls to `fillField()`, `selectOption()` etc. -You don't need to click the 'Submit' button afterwards. -This command itself triggers the request to form's action. - -You can optionally specify which button's value to include -in the request with the last parameter (as an alternative to -explicitly setting its value in the second parameter), as -button values are not otherwise included in the request. - -Examples: - -``` php -submitForm('#login', [ - 'login' => 'davert', - 'password' => '123456' -]); -// or -$I->submitForm('#login', [ - 'login' => 'davert', - 'password' => '123456' -], 'submitButtonName'); - -``` - -For example, given this sample "Sign Up" form: - -``` html -
- Login: -
- Password: -
- Do you agree to our terms? -
- Select pricing plan: - - -
-``` - -You could write the following to submit it: - -``` php -submitForm( - '#userForm', - [ - 'user' => [ - 'login' => 'Davert', - 'password' => '123456', - 'agree' => true - ] - ], - 'submitButton' -); -``` -Note that "2" will be the submitted value for the "plan" field, as it is -the selected option. - -You can also emulate a JavaScript submission by not specifying any -buttons in the third parameter to submitForm. - -```php -submitForm( - '#userForm', - [ - 'user' => [ - 'login' => 'Davert', - 'password' => '123456', - 'agree' => true - ] - ] -); -``` - -This function works well when paired with `seeInFormFields()` -for quickly testing CRUD interfaces and form validation logic. - -``` php - '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); -``` - -Parameter values can be set to arrays for multiple input fields -of the same name, or multi-select combo boxes. For checkboxes, -you can use either the string value or boolean `true`/`false` which will -be replaced by the checkbox's value in the DOM. - -``` php -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' - ] -]); -``` - -Mixing string and boolean values for a checkbox's value is not supported -and may produce unexpected results. - -Field names ending in `[]` must be passed without the trailing square -bracket characters, and must contain an array for its value. This allows -submitting multiple values with the same name, consider: - -```php -submitForm('#my-form', [ - 'field[]' => 'value', - 'field[]' => 'another value', // 'field[]' is already a defined key -]); -``` - -The solution is to pass an array value: - -```php -submitForm('#my-form', [ - 'field' => [ - 'value', - 'another value', - ] -]); -``` - - * `param` $selector - * `param` $params - * `param` $button - - -### switchToIframe - -Switch to iframe or frame on the page. - -Example: -``` html -