';
- $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:
-
- - `
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
-
-```
-
-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
-