From 8621949f523a19daf19e7eaf9228fe3f257a67a7 Mon Sep 17 00:00:00 2001 From: Carsten Brandt Date: Tue, 17 Dec 2013 00:27:33 +0100 Subject: [PATCH] cleanup and re-aranged codeception tests for basic app follow up to PR #1393 --- apps/basic/commands/HelloController.php | 2 +- apps/basic/composer.json | 4 +- apps/basic/config/codeception/acceptance.php | 2 + apps/basic/config/codeception/functional.php | 2 + apps/basic/config/codeception/unit.php | 4 +- apps/basic/config/web-test.php | 9 - apps/basic/config/web.php | 14 +- apps/basic/tests/README.md | 32 +- apps/basic/tests/_bootstrap.php | 8 +- apps/basic/tests/_helpers/CodeHelper.php | 3 +- apps/basic/tests/_helpers/TestHelper.php | 3 +- apps/basic/tests/_helpers/WebHelper.php | 3 +- apps/basic/tests/_pages/AboutPage.php | 6 +- apps/basic/tests/_pages/ContactPage.php | 21 +- apps/basic/tests/_pages/LoginPage.php | 12 +- apps/basic/tests/acceptance.suite.dist.yml | 19 - apps/basic/tests/acceptance.suite.yml | 24 + apps/basic/tests/acceptance/AboutCept.php | 1 + apps/basic/tests/acceptance/ContactCept.php | 1 + apps/basic/tests/acceptance/HomeCept.php | 1 + apps/basic/tests/acceptance/LoginCept.php | 1 + apps/basic/tests/acceptance/WebGuy.php | 2170 +++++++------------- apps/basic/tests/acceptance/_bootstrap.php | 5 +- apps/basic/tests/functional.suite.dist.yml | 15 - apps/basic/tests/functional.suite.yml | 18 + apps/basic/tests/functional/ContactCept.php | 1 + apps/basic/tests/functional/HomeCept.php | 1 + apps/basic/tests/functional/LoginCept.php | 1 + apps/basic/tests/functional/TestGuy.php | 38 +- apps/basic/tests/functional/_bootstrap.php | 4 +- apps/basic/tests/functional/_pages/ContactPage.php | 15 +- apps/basic/tests/functional/_pages/LoginPage.php | 9 +- apps/basic/tests/unit/_bootstrap.php | 7 +- apps/basic/tests/unit/models/ContactFormTest.php | 6 +- apps/basic/tests/unit/models/LoginFormTest.php | 6 +- apps/basic/tests/unit/models/UserTest.php | 17 +- apps/basic/tests/yii_bootstrap.php | 10 - apps/basic/web/index-debug.php | 13 - apps/basic/web/index-test-accept.php | 16 - apps/basic/web/index-test-acceptance.php | 17 + apps/basic/web/index-test-func.php | 16 - apps/basic/web/index-test-functional.php | 11 + apps/basic/web/index.php | 4 +- extensions/codeception/BasePage.php | 45 - extensions/codeception/CHANGELOG.md | 12 - extensions/codeception/LICENSE.md | 32 - extensions/codeception/README.md | 128 -- extensions/codeception/TestCase.php | 54 - extensions/codeception/composer.json | 26 - extensions/yii/codeception/BasePage.php | 50 + extensions/yii/codeception/CHANGELOG.md | 7 + extensions/yii/codeception/LICENSE.md | 32 + extensions/yii/codeception/README.md | 128 ++ extensions/yii/codeception/TestCase.php | 53 + extensions/yii/codeception/composer.json | 26 + 55 files changed, 1277 insertions(+), 1888 deletions(-) delete mode 100644 apps/basic/config/web-test.php delete mode 100644 apps/basic/tests/acceptance.suite.dist.yml create mode 100644 apps/basic/tests/acceptance.suite.yml delete mode 100644 apps/basic/tests/functional.suite.dist.yml create mode 100644 apps/basic/tests/functional.suite.yml delete mode 100644 apps/basic/tests/yii_bootstrap.php delete mode 100644 apps/basic/web/index-debug.php delete mode 100644 apps/basic/web/index-test-accept.php create mode 100644 apps/basic/web/index-test-acceptance.php delete mode 100644 apps/basic/web/index-test-func.php create mode 100644 apps/basic/web/index-test-functional.php delete mode 100644 extensions/codeception/BasePage.php delete mode 100644 extensions/codeception/CHANGELOG.md delete mode 100644 extensions/codeception/LICENSE.md delete mode 100644 extensions/codeception/README.md delete mode 100644 extensions/codeception/TestCase.php delete mode 100644 extensions/codeception/composer.json create mode 100644 extensions/yii/codeception/BasePage.php create mode 100644 extensions/yii/codeception/CHANGELOG.md create mode 100644 extensions/yii/codeception/LICENSE.md create mode 100644 extensions/yii/codeception/README.md create mode 100644 extensions/yii/codeception/TestCase.php create mode 100644 extensions/yii/codeception/composer.json diff --git a/apps/basic/commands/HelloController.php b/apps/basic/commands/HelloController.php index db36c5a..b62e5bb 100644 --- a/apps/basic/commands/HelloController.php +++ b/apps/basic/commands/HelloController.php @@ -10,7 +10,7 @@ namespace app\commands; use yii\console\Controller; /** - * This command echoes what the first argument that you have entered. + * This command echoes the first argument that you have entered. * * This command is provided as an example for you to learn how to create console commands. * diff --git a/apps/basic/composer.json b/apps/basic/composer.json index a248d05..63e3d92 100644 --- a/apps/basic/composer.json +++ b/apps/basic/composer.json @@ -16,11 +16,11 @@ "require": { "php": ">=5.4.0", "yiisoft/yii2": "*", - "yiisoft/yii2-swiftmailer": "*", "yiisoft/yii2-bootstrap": "*", "yiisoft/yii2-codeception": "*", "yiisoft/yii2-debug": "*", - "yiisoft/yii2-gii": "*" + "yiisoft/yii2-gii": "*", + "yiisoft/yii2-swiftmailer": "*" }, "scripts": { "post-create-project-cmd": [ diff --git a/apps/basic/config/codeception/acceptance.php b/apps/basic/config/codeception/acceptance.php index d8c8841..6036f88 100644 --- a/apps/basic/config/codeception/acceptance.php +++ b/apps/basic/config/codeception/acceptance.php @@ -1,5 +1,7 @@ [ 'db' => [ diff --git a/apps/basic/config/codeception/functional.php b/apps/basic/config/codeception/functional.php index 4ce22d3..760dcef 100644 --- a/apps/basic/config/codeception/functional.php +++ b/apps/basic/config/codeception/functional.php @@ -1,5 +1,7 @@ [ 'db' => [ diff --git a/apps/basic/config/codeception/unit.php b/apps/basic/config/codeception/unit.php index d4a6ce1..fd66970 100644 --- a/apps/basic/config/codeception/unit.php +++ b/apps/basic/config/codeception/unit.php @@ -1,10 +1,12 @@ [ 'fixture' => [ 'class' => 'yii\test\DbFixtureManager', - 'basePath' => '@app/tests/unit/fixtures', + 'basePath' => '@tests/unit/fixtures', ], 'db' => [ 'dsn' => 'mysql:host=localhost;dbname=yii2basic_unit', diff --git a/apps/basic/config/web-test.php b/apps/basic/config/web-test.php deleted file mode 100644 index e69a7b7..0000000 --- a/apps/basic/config/web-test.php +++ /dev/null @@ -1,9 +0,0 @@ - $params, ]; -if (YII_ENV_DEV) { +if (YII_ENV_DEV) +{ + // configuration adjustments for 'dev' environment $config['preload'][] = 'debug'; $config['modules']['debug'] = 'yii\debug\Module'; $config['modules']['gii'] = 'yii\gii\Module'; } +if (YII_ENV_TEST) +{ + // configuration adjustments for 'test' environment. + // configuration for codeception test environments can be found in codeception folder. + + // if needed, customize $config here. +} + return $config; diff --git a/apps/basic/tests/README.md b/apps/basic/tests/README.md index c87f762..117ab5b 100644 --- a/apps/basic/tests/README.md +++ b/apps/basic/tests/README.md @@ -3,18 +3,26 @@ These tests are developed with [Codeception PHP Testing Framework](http://codece To run the tests, follow these steps: -1. [Install Codeception](http://codeception.com/quickstart) if you do not have it yet. -2. Create test configuration files based on your environment: - - Copy `acceptance.suite.dist.yml` to `acceptance.suite.yml` and customize it; - - Copy `functional.suite.dist.yml` to `functional.suite.yml` and customize it; - - Copy `unit.suite.dist.yml` to `unit.suite.yml` and customize it. -3. Switch to the parent folder and run tests: - -``` -cd .. -php codecept.phar build // rebuild test scripts, only need to be run once -php codecept.phar run // run all available tests -``` +1. Download Codeception([Quickstart step 1](http://codeception.com/quickstart)) and put the codeception.phar in the + application base directory (not in this `tests` directory!). +2. Adjust the test configuration files based on your environment: + - Configure the URL for [acceptance tests](http://codeception.com/docs/04-AcceptanceTests) in `acceptance.suite.yml`. + The URL should point to the `index-test-acceptance.php` file that is located under the `web` directory of the application. + - `functional.suite.yml` for [functional testing](http://codeception.com/docs/05-FunctionalTests) and + `unit.suite.yml` for [unit testing](http://codeception.com/docs/06-UnitTests) should already work out of the box + and should not need to be adjusted. +3. Go to the application base directory and build the test suites: + ``` + php codecept.phar build // rebuild test scripts, only need to be run once + ``` +4. Run the tests: + ``` + php codecept.phar run // run all available tests + // you can also run a test suite alone: + php codecept.phar run acceptance + php codecept.phar run functional + php codecept.phar run unit + ``` Please refer to [Codeception tutorial](http://codeception.com/docs/01-Introduction) for more details about writing acceptance, functional and unit tests. diff --git a/apps/basic/tests/_bootstrap.php b/apps/basic/tests/_bootstrap.php index e2dcb10..ec9390e 100644 --- a/apps/basic/tests/_bootstrap.php +++ b/apps/basic/tests/_bootstrap.php @@ -1,3 +1,9 @@ guy->fillField($this->name,$contactData['name']); - $this->guy->fillField($this->email,$contactData['email']); - $this->guy->fillField($this->subject,$contactData['subject']); - $this->guy->fillField($this->body,$contactData['body']); - $this->guy->fillField($this->verifyCode,$contactData['verifyCode']); + $this->guy->fillField($this->name, $contactData['name']); + $this->guy->fillField($this->email, $contactData['email']); + $this->guy->fillField($this->subject, $contactData['subject']); + $this->guy->fillField($this->body, $contactData['body']); + $this->guy->fillField($this->verifyCode, $contactData['verifyCode']); } $this->guy->click($this->button); } - } diff --git a/apps/basic/tests/_pages/LoginPage.php b/apps/basic/tests/_pages/LoginPage.php index 6dad5ed..74725d1 100644 --- a/apps/basic/tests/_pages/LoginPage.php +++ b/apps/basic/tests/_pages/LoginPage.php @@ -2,9 +2,10 @@ namespace tests\_pages; -class LoginPage extends \yii\codeception\BasePage -{ +use yii\codeception\BasePage; +class LoginPage extends BasePage +{ public static $URL = '?r=site/login'; /** @@ -12,13 +13,11 @@ class LoginPage extends \yii\codeception\BasePage * @var string */ public $username = 'input[name="LoginForm[username]"]'; - /** * login form password text field locator * @var string */ public $password = 'input[name="LoginForm[password]"]'; - /** * login form submit button locator * @var string @@ -32,9 +31,8 @@ class LoginPage extends \yii\codeception\BasePage */ public function login($username, $password) { - $this->guy->fillField($this->username,$username); - $this->guy->fillField($this->password,$password); + $this->guy->fillField($this->username, $username); + $this->guy->fillField($this->password, $password); $this->guy->click($this->button); } - } diff --git a/apps/basic/tests/acceptance.suite.dist.yml b/apps/basic/tests/acceptance.suite.dist.yml deleted file mode 100644 index 78d590c..0000000 --- a/apps/basic/tests/acceptance.suite.dist.yml +++ /dev/null @@ -1,19 +0,0 @@ -# Codeception Test Suite Configuration - -# suite for acceptance tests. -# perform tests in browser using the Selenium-like tools. -# powered by Mink (http://mink.behat.org). -# (tip: that's what your customer will see). -# (tip: test your ajax and javascript by one of Mink drivers). - -# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES. - -class_name: WebGuy -modules: - enabled: - - WebHelper - - WebDriver - config: - WebDriver: - url: 'http://localhost/basic/web/index-test-accept.php' - browser: firefox diff --git a/apps/basic/tests/acceptance.suite.yml b/apps/basic/tests/acceptance.suite.yml new file mode 100644 index 0000000..2f37e16 --- /dev/null +++ b/apps/basic/tests/acceptance.suite.yml @@ -0,0 +1,24 @@ +# Codeception Test Suite Configuration + +# suite for acceptance tests. +# perform tests in browser using the Selenium-like tools. +# powered by Mink (http://mink.behat.org). +# (tip: that's what your customer will see). +# (tip: test your ajax and javascript by one of Mink drivers). + +# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES. + +class_name: WebGuy +modules: + enabled: + - WebHelper + - PhpBrowser +# you can use WebDriver instead of PhpBrowser to test javascript and ajax. +# This will require you to install selenium. See http://codeception.com/docs/04-AcceptanceTests#Selenium +# - WebDriver + config: + PhpBrowser: + url: 'http://localhost/basic-app/web/index-test-acceptance.php' +# WebDriver: +# url: 'http://localhost/basic-app/web/index-test-acceptance.php' +# browser: firefox diff --git a/apps/basic/tests/acceptance/AboutCept.php b/apps/basic/tests/acceptance/AboutCept.php index 7e95f80..b6be2f3 100644 --- a/apps/basic/tests/acceptance/AboutCept.php +++ b/apps/basic/tests/acceptance/AboutCept.php @@ -1,4 +1,5 @@ wantTo('ensure that home page works'); $I->amOnPage(''); diff --git a/apps/basic/tests/acceptance/LoginCept.php b/apps/basic/tests/acceptance/LoginCept.php index ba939ff..00ba0de 100644 --- a/apps/basic/tests/acceptance/LoginCept.php +++ b/apps/basic/tests/acceptance/LoginCept.php @@ -1,4 +1,5 @@ submitForm('#login', array('login' => 'davert', 'password' => '123456')); * - * $I->amOnSubdomain('user'); - * $I->amOnPage('/'); - * // moves to http://user.mysite.com/ - * ?> * ``` - * @param $subdomain - * @return mixed - * @see Codeception\Module\WebDriver::amOnSubdomain() - * @return \Codeception\Maybe - */ - public function amOnSubdomain($subdomain) { - $this->scenario->addStep(new \Codeception\Step\Condition('amOnSubdomain', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- * - * Makes a screenshot of current window and saves it to `tests/_log/debug`. + * For sample Sign Up form: + * + * ``` html + *
+ * Login:
+ * Password:
+ * Do you agree to out terms?
+ * Select pricing plan + * + *
+ * ``` + * I can write this: * * ``` php * amOnPage('/user/edit'); - * $I->makeScreenshot('edit page'); - * // saved to: tests/_log/debug/UserEdit - edit page.png - * ?> + * $I->submitForm('#userForm', array('user' => array('login' => 'Davert', 'password' => '123456', 'agree' => true))); + * * ``` + * Note, that pricing plan will be set to Paid, as it's selected on page. * - * @param $name - * @see Codeception\Module\WebDriver::makeScreenshot() + * @param $selector + * @param $params + * @see Codeception\Module\PhpBrowser::submitForm() * @return \Codeception\Maybe */ - public function makeScreenshot($name) { - $this->scenario->addStep(new \Codeception\Step\Action('makeScreenshot', func_get_args())); + public function submitForm($selector, $params) { + $this->scenario->addStep(new \Codeception\Step\Action('submitForm', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -114,22 +107,29 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Resize current window + * 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 * resizeWindow(800, 600); + * $I->sendAjaxPostRequest('/updateSettings', array('notifications' => true)); // POST + * $I->sendAjaxGetRequest('/updateSettings', array('notifications' => true)); // GET * * ``` * - * @param int $width - * @param int $height - * @see Codeception\Module\WebDriver::resizeWindow() + * @param $uri + * @param $params + * @see Codeception\Module\PhpBrowser::sendAjaxPostRequest() * @return \Codeception\Maybe */ - public function resizeWindow($width, $height) { - $this->scenario->addStep(new \Codeception\Step\Action('resizeWindow', func_get_args())); + public function sendAjaxPostRequest($uri, $params = null) { + $this->scenario->addStep(new \Codeception\Step\Action('sendAjaxPostRequest', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -143,36 +143,52 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that cookie is set. + * If your page triggers an ajax request, you can perform it manually. + * This action sends a GET ajax request with specified params. * - * @param $cookie - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeCookie() + * See ->sendAjaxPostRequest for examples. + * + * @param $uri + * @param $params + * @see Codeception\Module\PhpBrowser::sendAjaxGetRequest() * @return \Codeception\Maybe */ - public function canSeeCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCookie', func_get_args())); + public function sendAjaxGetRequest($uri, $params = null) { + $this->scenario->addStep(new \Codeception\Step\Action('sendAjaxGetRequest', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } + + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that cookie is set. + * If your page triggers an ajax request, you can perform it manually. + * This action sends an ajax request with specified method and params. * - * @param $cookie - * @return mixed - * @see Codeception\Module\WebDriver::seeCookie() + * 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 + * @see Codeception\Module\PhpBrowser::sendAjaxRequest() * @return \Codeception\Maybe */ - public function seeCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeCookie', func_get_args())); + public function sendAjaxRequest($method, $uri, $params = null) { + $this->scenario->addStep(new \Codeception\Step\Action('sendAjaxRequest', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -186,16 +202,13 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that cookie doesn't exist - * - * @param $cookie - * @return mixed + * Asserts that current page has 404 response status code. * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeCookie() + * @see Codeception\Module\PhpBrowser::seePageNotFound() * @return \Codeception\Maybe */ - public function cantSeeCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCookie', func_get_args())); + public function canSeePageNotFound() { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seePageNotFound', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -207,15 +220,12 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that cookie doesn't exist - * - * @param $cookie - * @return mixed - * @see Codeception\Module\WebDriver::dontSeeCookie() + * Asserts that current page has 404 response status code. + * @see Codeception\Module\PhpBrowser::seePageNotFound() * @return \Codeception\Maybe */ - public function dontSeeCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCookie', func_get_args())); + public function seePageNotFound() { + $this->scenario->addStep(new \Codeception\Step\Assertion('seePageNotFound', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -229,38 +239,36 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Sets a cookie. + * Checks that response code is equal to value provided. * - * @param $cookie - * @param $value + * @param $code * @return mixed - * @see Codeception\Module\WebDriver::setCookie() + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\PhpBrowser::seeResponseCodeIs() * @return \Codeception\Maybe */ - public function setCookie($cookie, $value) { - $this->scenario->addStep(new \Codeception\Step\Action('setCookie', func_get_args())); + public function canSeeResponseCodeIs($code) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeResponseCodeIs', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Unsets cookie + * Checks that response code is equal to value provided. * - * @param $cookie + * @param $code * @return mixed - * @see Codeception\Module\WebDriver::resetCookie() + * @see Codeception\Module\PhpBrowser::seeResponseCodeIs() * @return \Codeception\Maybe */ - public function resetCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\Action('resetCookie', func_get_args())); + public function seeResponseCodeIs($code) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeResponseCodeIs', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -274,15 +282,15 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Grabs a cookie value. + * Adds HTTP authentication via username/password. * - * @param $cookie - * @return mixed - * @see Codeception\Module\WebDriver::grabCookie() + * @param $username + * @param $password + * @see Codeception\Module\PhpBrowser::amHttpAuthenticated() * @return \Codeception\Maybe */ - public function grabCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\Action('grabCookie', func_get_args())); + public function amHttpAuthenticated($username, $password) { + $this->scenario->addStep(new \Codeception\Step\Condition('amHttpAuthenticated', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -296,26 +304,35 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Opens the page. - * Requires relative uri as parameter + * Low-level API method. + * If Codeception commands are not enough, use [Guzzle HTTP Client](http://guzzlephp.org/) methods directly * * Example: * * ``` php * amOnPage('/'); - * // opens /register page - * $I->amOnPage('/register'); + * // from the official Guzzle manual + * $I->amGoingTo('Sign all requests with OAuth'); + * $I->executeInGuzzle(function (\Guzzle\Http\Client $client) { + * $client->addSubscriber(new Guzzle\Plugin\Oauth\OauthPlugin(array( + * 'consumer_key' => '***', + * 'consumer_secret' => '***', + * 'token' => '***', + * 'token_secret' => '***' + * ))); + * }); * ?> * ``` * - * @param $page - * @see Codeception\Module\WebDriver::amOnPage() + * Not recommended this command too be used on regular basis. + * If Codeception lacks important Guzzle Client methods implement then and submit patches. + * + * @param callable $function + * @see Codeception\Module\PhpBrowser::executeInGuzzle() * @return \Codeception\Maybe */ - public function amOnPage($page) { - $this->scenario->addStep(new \Codeception\Step\Condition('amOnPage', func_get_args())); + public function executeInGuzzle($function) { + $this->scenario->addStep(new \Codeception\Step\Action('executeInGuzzle', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -329,27 +346,26 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Check if current page contains the text specified. - * Specify the css selector to match only specific region. + * Assert if the specified checkbox is checked. + * Use css selector or xpath to match. * - * Examples: + * Example: * * ``` 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->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 $text - * @param null $selector + * @param $checkbox * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::see() + * @see Codeception\Module\PhpBrowser::seeCheckboxIsChecked() * @return \Codeception\Maybe */ - public function canSee($text, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('see', func_get_args())); + public function canSeeCheckboxIsChecked($checkbox) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCheckboxIsChecked', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -361,26 +377,25 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Check if current page contains the text specified. - * Specify the css selector to match only specific region. + * Assert if the specified checkbox is checked. + * Use css selector or xpath to match. * - * Examples: + * Example: * * ``` 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->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 $text - * @param null $selector - * @see Codeception\Module\WebDriver::see() + * @param $checkbox + * @see Codeception\Module\PhpBrowser::seeCheckboxIsChecked() * @return \Codeception\Maybe */ - public function see($text, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\Assertion('see', func_get_args())); + public function seeCheckboxIsChecked($checkbox) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeCheckboxIsChecked', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -394,27 +409,25 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Check if current page doesn't contain the text specified. - * Specify the css selector to match only specific region. + * Assert if the specified checkbox is unchecked. + * Use css selector or xpath to match. * - * Examples: + * Example: * - * ```php + * ``` 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->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 $text - * @param null $selector + * @param $checkbox * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSee() + * @see Codeception\Module\PhpBrowser::dontSeeCheckboxIsChecked() * @return \Codeception\Maybe */ - public function cantSee($text, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSee', func_get_args())); + public function cantSeeCheckboxIsChecked($checkbox) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCheckboxIsChecked', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -426,26 +439,24 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Check if current page doesn't contain the text specified. - * Specify the css selector to match only specific region. + * Assert if the specified checkbox is unchecked. + * Use css selector or xpath to match. * - * Examples: + * Example: * - * ```php + * ``` 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->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 $text - * @param null $selector - * @see Codeception\Module\WebDriver::dontSee() + * @param $checkbox + * @see Codeception\Module\PhpBrowser::dontSeeCheckboxIsChecked() * @return \Codeception\Maybe */ - public function dontSee($text, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSee', func_get_args())); + public function dontSeeCheckboxIsChecked($checkbox) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCheckboxIsChecked', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -459,39 +470,14 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Perform a click on link or button. - * Link or button are found by their names or CSS selector. - * Submits a form if button is a submit type. - * - * If link is an image it's found by alt attribute value of image. - * If button is image button is found by it's value - * If link or button can't be found by name they are searched by CSS selector. - * - * The second parameter is a context: CSS or XPath locator to narrow the search. - * - * Examples: + * Opens the page. * - * ``` 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'); - * ?> - * ``` - * @param $link - * @param $context - * @see Codeception\Module\WebDriver::click() + * @param $page + * @see Codeception\Util\Mink::amOnPage() * @return \Codeception\Maybe */ - public function click($link, $context = null) { - $this->scenario->addStep(new \Codeception\Step\Action('click', func_get_args())); + public function amOnPage($page) { + $this->scenario->addStep(new \Codeception\Step\Condition('amOnPage', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -505,784 +491,70 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if there is a link with text specified. - * Specify url to match link with exact this url. - * - * Examples: + * Sets 'url' configuration parameter to hosts subdomain. + * It does not open a page on subdomain. Use `amOnPage` for that * * ``` php * seeLink('Logout'); // matches Logout - * $I->seeLink('Logout','/logout'); // matches Logout + * // 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 $text - * @param null $url - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeLink() + * @param $subdomain + * @return mixed + * @see Codeception\Util\Mink::amOnSubdomain() * @return \Codeception\Maybe */ - public function canSeeLink($text, $url = null) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeLink', func_get_args())); + public function amOnSubdomain($subdomain) { + $this->scenario->addStep(new \Codeception\Step\Condition('amOnSubdomain', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } + + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if there is a link with text specified. - * Specify url to match link with exact this url. - * - * Examples: + * @param string $text + * @param string $selector * - * ``` php - * seeLink('Logout'); // matches Logout - * $I->seeLink('Logout','/logout'); // matches Logout - * ?> - * ``` - * - * @param $text - * @param null $url - * @see Codeception\Module\WebDriver::seeLink() - * @return \Codeception\Maybe - */ - public function seeLink($text, $url = null) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeLink', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks if page doesn't contain the link with text specified. - * Specify url to narrow the results. - * - * Examples: - * - * ``` php - * dontSeeLink('Logout'); // I suppose user is not logged in - * ?> - * ``` - * - * @param $text - * @param null $url - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeLink() - * @return \Codeception\Maybe - */ - public function cantSeeLink($text, $url = null) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeLink', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks if page doesn't contain the link with text specified. - * Specify url to narrow the results. - * - * Examples: - * - * ``` php - * dontSeeLink('Logout'); // I suppose user is not logged in - * ?> - * ``` - * - * @param $text - * @param null $url - * @see Codeception\Module\WebDriver::dontSeeLink() - * @return \Codeception\Maybe - */ - public function dontSeeLink($text, $url = null) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeLink', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current uri contains a value - * - * ``` php - * seeInCurrentUrl('home'); - * // to match: /users/1 - * $I->seeInCurrentUrl('/users/'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeInCurrentUrl() - * @return \Codeception\Maybe - */ - public function canSeeInCurrentUrl($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeInCurrentUrl', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current uri contains a value - * - * ``` php - * seeInCurrentUrl('home'); - * // to match: /users/1 - * $I->seeInCurrentUrl('/users/'); - * ?> - * ``` - * - * @param $uri - * @see Codeception\Module\WebDriver::seeInCurrentUrl() - * @return \Codeception\Maybe - */ - public function seeInCurrentUrl($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeInCurrentUrl', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current url is equal to value. - * Unlike `seeInCurrentUrl` performs a strict check. - * - * ``` php - * seeCurrentUrlEquals('/'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeCurrentUrlEquals() - * @return \Codeception\Maybe - */ - public function canSeeCurrentUrlEquals($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlEquals', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current url is equal to value. - * Unlike `seeInCurrentUrl` performs a strict check. - * - * ``` php - * seeCurrentUrlEquals('/'); - * ?> - * ``` - * - * @param $uri - * @see Codeception\Module\WebDriver::seeCurrentUrlEquals() - * @return \Codeception\Maybe - */ - public function seeCurrentUrlEquals($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeCurrentUrlEquals', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current url is matches a RegEx value - * - * ``` php - * seeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeCurrentUrlMatches() - * @return \Codeception\Maybe - */ - public function canSeeCurrentUrlMatches($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlMatches', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current url is matches a RegEx value - * - * ``` php - * seeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` - * - * @param $uri - * @see Codeception\Module\WebDriver::seeCurrentUrlMatches() - * @return \Codeception\Maybe - */ - public function seeCurrentUrlMatches($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeCurrentUrlMatches', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current uri does not contain a value - * - * ``` php - * dontSeeInCurrentUrl('/users/'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeInCurrentUrl() - * @return \Codeception\Maybe - */ - public function cantSeeInCurrentUrl($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeInCurrentUrl', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current uri does not contain a value - * - * ``` php - * dontSeeInCurrentUrl('/users/'); - * ?> - * ``` - * - * @param $uri - * @see Codeception\Module\WebDriver::dontSeeInCurrentUrl() - * @return \Codeception\Maybe - */ - public function dontSeeInCurrentUrl($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeInCurrentUrl', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current url is not equal to value. - * Unlike `dontSeeInCurrentUrl` performs a strict check. - * - * ``` php - * dontSeeCurrentUrlEquals('/'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeCurrentUrlEquals() - * @return \Codeception\Maybe - */ - public function cantSeeCurrentUrlEquals($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlEquals', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current url is not equal to value. - * Unlike `dontSeeInCurrentUrl` performs a strict check. - * - * ``` php - * dontSeeCurrentUrlEquals('/'); - * ?> - * ``` - * - * @param $uri - * @see Codeception\Module\WebDriver::dontSeeCurrentUrlEquals() - * @return \Codeception\Maybe - */ - public function dontSeeCurrentUrlEquals($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlEquals', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current url does not match a RegEx value - * - * ``` php - * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeCurrentUrlMatches() - * @return \Codeception\Maybe - */ - public function cantSeeCurrentUrlMatches($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlMatches', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that current url does not match a RegEx value - * - * ``` php - * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` - * - * @param $uri - * @see Codeception\Module\WebDriver::dontSeeCurrentUrlMatches() - * @return \Codeception\Maybe - */ - public function dontSeeCurrentUrlMatches($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlMatches', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Takes a parameters from current URI by RegEx. - * If no url provided returns full URI. - * - * ``` php - * grabFromCurrentUrl('~$/user/(\d+)/~'); - * $uri = $I->grabFromCurrentUrl(); - * ?> - * ``` - * - * @param null $uri - * @internal param $url - * @return mixed - * @see Codeception\Module\WebDriver::grabFromCurrentUrl() - * @return \Codeception\Maybe - */ - public function grabFromCurrentUrl($uri = null) { - $this->scenario->addStep(new \Codeception\Step\Action('grabFromCurrentUrl', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Assert if the specified checkbox is checked. - * Use css selector or xpath to match. - * - * Example: - * - * ``` 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 - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeCheckboxIsChecked() - * @return \Codeception\Maybe - */ - public function canSeeCheckboxIsChecked($checkbox) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCheckboxIsChecked', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Assert if the specified checkbox is checked. - * Use css selector or xpath to match. - * - * Example: - * - * ``` 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 - * @see Codeception\Module\WebDriver::seeCheckboxIsChecked() - * @return \Codeception\Maybe - */ - public function seeCheckboxIsChecked($checkbox) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeCheckboxIsChecked', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Assert if the specified checkbox is unchecked. - * Use css selector or xpath to match. - * - * Example: - * - * ``` 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 - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeCheckboxIsChecked() - * @return \Codeception\Maybe - */ - public function cantSeeCheckboxIsChecked($checkbox) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCheckboxIsChecked', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Assert if the specified checkbox is unchecked. - * Use css selector or xpath to match. - * - * Example: - * - * ``` 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 - * @see Codeception\Module\WebDriver::dontSeeCheckboxIsChecked() - * @return \Codeception\Maybe - */ - public function dontSeeCheckboxIsChecked($checkbox) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCheckboxIsChecked', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that an input field or textarea contains value. - * Field is matched either by label or CSS or Xpath - * - * Example: - * - * ``` 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'); - * ?> - * ``` - * - * @param $field - * @param $value - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeInField() - * @return \Codeception\Maybe - */ - public function canSeeInField($field, $value) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeInField', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that an input field or textarea contains value. - * Field is matched either by label or CSS or Xpath - * - * Example: - * - * ``` 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'); - * ?> - * ``` - * - * @param $field - * @param $value - * @see Codeception\Module\WebDriver::seeInField() - * @return \Codeception\Maybe - */ - public function seeInField($field, $value) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeInField', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that an input field or textarea doesn't contain value. - * Field is matched either by label or CSS or Xpath - * Example: - * - * ``` 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'); - * ?> - * ``` - * - * @param $field - * @param $value + * @return void * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeInField() - * @return \Codeception\Maybe - */ - public function cantSeeInField($field, $value) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeInField', func_get_args())); - if ($this->scenario->running()) { - $result = $this->scenario->runStep(); - return new Maybe($result); - } - return new Maybe(); - } - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * Checks that an input field or textarea doesn't contain value. - * Field is matched either by label or CSS or Xpath - * Example: - * - * ``` 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'); - * ?> - * ``` - * - * @param $field - * @param $value - * @see Codeception\Module\WebDriver::dontSeeInField() + * @see Codeception\Util\Mink::dontSee() * @return \Codeception\Maybe */ - public function dontSeeInField($field, $value) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeInField', func_get_args())); + public function cantSee($text, $selector = null) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSee', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Selects an option in select tag or in radio button group. - * - * Example: - * - * ``` php - * selectOption('form select[name=account]', 'Premium'); - * $I->selectOption('form input[name=payment]', 'Monthly'); - * $I->selectOption('//form/select[@name=account]', 'Monthly'); - * ?> - * ``` - * - * Can select multiple options if second argument is array: - * - * ``` php - * selectOption('Which OS do you use?', array('Windows','Linux')); - * ?> - * ``` + * @param string $text + * @param string $selector * - * @param $select - * @param $option - * @see Codeception\Module\WebDriver::selectOption() + * @return void + * @see Codeception\Util\Mink::dontSee() * @return \Codeception\Maybe */ - public function selectOption($select, $option) { - $this->scenario->addStep(new \Codeception\Step\Action('selectOption', func_get_args())); + public function dontSee($text, $selector = null) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSee', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1296,42 +568,58 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * + * Check if current page contains the text specified. + * Specify the css selector to match only specific region. + * + * Examples: + * + * ``` 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 + * ?> + * ``` * - * @see Codeception\Module\WebDriver::unselectOption() + * @param $text + * @param null $selector + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Util\Mink::see() * @return \Codeception\Maybe */ - public function unselectOption($select, $option) { - $this->scenario->addStep(new \Codeception\Step\Action('unselectOption', func_get_args())); + public function canSee($text, $selector = null) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('see', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Ticks a checkbox. - * For radio buttons use `selectOption` method. + * Check if current page contains the text specified. + * Specify the css selector to match only specific region. * - * Example: + * Examples: * * ``` php * checkOption('#agree'); + * $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 * ?> * ``` * - * @param $option - * @see Codeception\Module\WebDriver::checkOption() + * @param $text + * @param null $selector + * @see Codeception\Util\Mink::see() * @return \Codeception\Maybe */ - public function checkOption($option) { - $this->scenario->addStep(new \Codeception\Step\Action('checkOption', func_get_args())); + public function see($text, $selector = null) { + $this->scenario->addStep(new \Codeception\Step\Assertion('see', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1345,52 +633,56 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Unticks a checkbox. + * Checks if there is a link with text specified. + * Specify url to match link with exact this url. * - * Example: + * Examples: * * ``` php * uncheckOption('#notify'); + * $I->seeLink('Logout'); // matches Logout + * $I->seeLink('Logout','/logout'); // matches Logout * ?> * ``` * - * @param $option - * @see Codeception\Module\WebDriver::uncheckOption() + * @param $text + * @param null $url + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Util\Mink::seeLink() * @return \Codeception\Maybe */ - public function uncheckOption($option) { - $this->scenario->addStep(new \Codeception\Step\Action('uncheckOption', func_get_args())); + public function canSeeLink($text, $url = null) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeLink', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Fills a text field or textarea with value. - * - * Example: - * + * Checks if there is a link with text specified. + * Specify url to match link with exact this url. + * + * Examples: + * * ``` php * fillField("//input[@type='text']", "Hello World!"); + * $I->seeLink('Logout'); // matches Logout + * $I->seeLink('Logout','/logout'); // matches Logout * ?> * ``` * - * @param $field - * @param $value - * @see Codeception\Module\WebDriver::fillField() + * @param $text + * @param null $url + * @see Codeception\Util\Mink::seeLink() * @return \Codeception\Maybe */ - public function fillField($field, $value) { - $this->scenario->addStep(new \Codeception\Step\Action('fillField', func_get_args())); + public function seeLink($text, $url = null) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeLink', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1404,57 +696,54 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Attaches file from Codeception data directory to upload field. + * Checks if page doesn't contain the link with text specified. + * Specify url to narrow the results. * - * Example: + * Examples: * * ``` php * attachFile('input[@type="file"]', 'prices.xls'); + * $I->dontSeeLink('Logout'); // I suppose user is not logged in * ?> * ``` * - * @param $field - * @param $filename - * @see Codeception\Module\WebDriver::attachFile() + * @param $text + * @param null $url + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Util\Mink::dontSeeLink() * @return \Codeception\Maybe */ - public function attachFile($field, $filename) { - $this->scenario->addStep(new \Codeception\Step\Action('attachFile', func_get_args())); + public function cantSeeLink($text, $url = null) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeLink', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Finds and returns text contents of element. - * Element is searched by CSS selector, XPath or matcher by regex. + * Checks if page doesn't contain the link with text specified. + * Specify url to narrow the results. * - * Example: + * Examples: * * ``` php * grabTextFrom('h1'); - * $heading = $I->grabTextFrom('descendant-or-self::h1'); - * $value = $I->grabTextFrom('~dontSeeLink('Logout'); // I suppose user is not logged in * ?> * ``` * - * @param $cssOrXPathOrRegex - * @return mixed - * @see Codeception\Module\WebDriver::grabTextFrom() + * @param $text + * @param null $url + * @see Codeception\Util\Mink::dontSeeLink() * @return \Codeception\Maybe */ - public function grabTextFrom($cssOrXPathOrRegex) { - $this->scenario->addStep(new \Codeception\Step\Action('grabTextFrom', func_get_args())); + public function dontSeeLink($text, $url = null) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeLink', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1468,26 +757,39 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Finds and returns field and returns it's value. - * Searches by field name, then by CSS, then by XPath + * Perform a click on link or button. + * Link or button are found by their names or CSS selector. + * Submits a form if button is a submit type. * - * Example: + * If link is an image it's found by alt attribute value of image. + * If button is image button is found by it's value + * If link or button can't be found by name they are searched by CSS selector. + * + * The second parameter is a context: CSS or XPath locator to narrow the search. + * + * Examples: * * ``` php * grabValueFrom('Name'); - * $name = $I->grabValueFrom('input[name=username]'); - * $name = $I->grabValueFrom('descendant-or-self::form/descendant::input[@name = 'username']'); + * // 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'); * ?> * ``` - * - * @param $field - * @return mixed - * @see Codeception\Module\WebDriver::grabValueFrom() + * @param $link + * @param $context + * @see Codeception\Util\Mink::click() * @return \Codeception\Maybe */ - public function grabValueFrom($field) { - $this->scenario->addStep(new \Codeception\Step\Action('grabValueFrom', func_get_args())); + public function click($link, $context = null) { + $this->scenario->addStep(new \Codeception\Step\Action('click', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1501,7 +803,7 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks for a visible element on a page, matching it by CSS or XPath + * Checks if element exists on a page, matching it by CSS or XPath * * ``` php * * ``` * @param $selector - * @see Codeception\Module\WebDriver::seeElement() + * @see Codeception\Util\Mink::seeElement() * @return \Codeception\Maybe */ public function seeElement($selector) { @@ -1554,18 +856,19 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that element is invisible or not present on page. + * Checks if element does not exist (or is visible) on a page, matching it by CSS or XPath * + * Example: + * * ``` php * dontSeeElement('.error'); * $I->dontSeeElement('//form/input[1]'); * ?> * ``` - * * @param $selector * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeElement() + * @see Codeception\Util\Mink::dontSeeElement() * @return \Codeception\Maybe */ public function cantSeeElement($selector) { @@ -1581,17 +884,18 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that element is invisible or not present on page. + * Checks if element does not exist (or is visible) on a page, matching it by CSS or XPath * + * Example: + * * ``` php * dontSeeElement('.error'); * $I->dontSeeElement('//form/input[1]'); * ?> * ``` - * * @param $selector - * @see Codeception\Module\WebDriver::dontSeeElement() + * @see Codeception\Util\Mink::dontSeeElement() * @return \Codeception\Maybe */ public function dontSeeElement($selector) { @@ -1609,46 +913,120 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if element exists on a page even it is invisible. + * Reloads current page + * @see Codeception\Util\Mink::reloadPage() + * @return \Codeception\Maybe + */ + public function reloadPage() { + $this->scenario->addStep(new \Codeception\Step\Action('reloadPage', func_get_args())); + if ($this->scenario->running()) { + $result = $this->scenario->runStep(); + return new Maybe($result); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * Moves back in history + * @see Codeception\Util\Mink::moveBack() + * @return \Codeception\Maybe + */ + public function moveBack() { + $this->scenario->addStep(new \Codeception\Step\Action('moveBack', func_get_args())); + if ($this->scenario->running()) { + $result = $this->scenario->runStep(); + return new Maybe($result); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * Moves forward in history + * @see Codeception\Util\Mink::moveForward() + * @return \Codeception\Maybe + */ + public function moveForward() { + $this->scenario->addStep(new \Codeception\Step\Action('moveForward', func_get_args())); + if ($this->scenario->running()) { + $result = $this->scenario->runStep(); + return new Maybe($result); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- * + * Fills a text field or textarea with value. + * + * Example: + * * ``` php * seeElementInDOM('//form/input[type=hidden]'); + * $I->fillField("//input[@type='text']", "Hello World!"); * ?> * ``` * - * @param $selector - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeElementInDOM() + * @param $field + * @param $value + * @see Codeception\Util\Mink::fillField() * @return \Codeception\Maybe */ - public function canSeeElementInDOM($selector) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeElementInDOM', func_get_args())); + public function fillField($field, $value) { + $this->scenario->addStep(new \Codeception\Step\Action('fillField', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } + + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if element exists on a page even it is invisible. + * Selects an option in select tag or in radio button group. + * + * Example: * * ``` php * seeElementInDOM('//form/input[type=hidden]'); + * $I->selectOption('form select[name=account]', 'Premium'); + * $I->selectOption('form input[name=payment]', 'Monthly'); + * $I->selectOption('//form/select[@name=account]', 'Monthly'); * ?> * ``` * - * @param $selector - * @see Codeception\Module\WebDriver::seeElementInDOM() + * Can select multiple options if second argument is array: + * + * ``` php + * selectOption('Which OS do you use?', array('Windows','Linux')); + * ?> + * ``` + * + * @param $select + * @param $option + * @see Codeception\Util\Mink::selectOption() * @return \Codeception\Maybe */ - public function seeElementInDOM($selector) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeElementInDOM', func_get_args())); + public function selectOption($select, $option) { + $this->scenario->addStep(new \Codeception\Step\Action('selectOption', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1662,34 +1040,52 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Opposite to `seeElementInDOM`. + * Ticks a checkbox. + * For radio buttons use `selectOption` method. + * + * Example: + * + * ``` php + * checkOption('#agree'); + * ?> + * ``` * - * @param $selector - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeElementInDOM() + * @param $option + * @see Codeception\Util\Mink::checkOption() * @return \Codeception\Maybe */ - public function cantSeeElementInDOM($selector) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeElementInDOM', func_get_args())); + public function checkOption($option) { + $this->scenario->addStep(new \Codeception\Step\Action('checkOption', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } + + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Opposite to `seeElementInDOM`. + * Unticks a checkbox. * - * @param $selector - * @see Codeception\Module\WebDriver::dontSeeElementInDOM() + * Example: + * + * ``` php + * uncheckOption('#notify'); + * ?> + * ``` + * + * @param $option + * @see Codeception\Util\Mink::uncheckOption() * @return \Codeception\Maybe */ - public function dontSeeElementInDOM($selector) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeElementInDOM', func_get_args())); + public function uncheckOption($option) { + $this->scenario->addStep(new \Codeception\Step\Action('uncheckOption', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1703,23 +1099,24 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if option is selected in select field. + * Checks that current uri contains a value * * ``` php * seeOptionIsSelected('#form input[name=payment]', 'Visa'); + * // to match: /home/dashboard + * $I->seeInCurrentUrl('home'); + * // to match: /users/1 + * $I->seeInCurrentUrl('/users/'); * ?> * ``` * - * @param $selector - * @param $optionText - * @return mixed + * @param $uri * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeOptionIsSelected() + * @see Codeception\Util\Mink::seeInCurrentUrl() * @return \Codeception\Maybe */ - public function canSeeOptionIsSelected($selector, $optionText) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeOptionIsSelected', func_get_args())); + public function canSeeInCurrentUrl($uri) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeInCurrentUrl', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1731,22 +1128,23 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if option is selected in select field. + * Checks that current uri contains a value * * ``` php * seeOptionIsSelected('#form input[name=payment]', 'Visa'); + * // to match: /home/dashboard + * $I->seeInCurrentUrl('home'); + * // to match: /users/1 + * $I->seeInCurrentUrl('/users/'); * ?> * ``` * - * @param $selector - * @param $optionText - * @return mixed - * @see Codeception\Module\WebDriver::seeOptionIsSelected() + * @param $uri + * @see Codeception\Util\Mink::seeInCurrentUrl() * @return \Codeception\Maybe */ - public function seeOptionIsSelected($selector, $optionText) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeOptionIsSelected', func_get_args())); + public function seeInCurrentUrl($uri) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeInCurrentUrl', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1760,23 +1158,21 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if option is not selected in select field. + * Checks that current uri does not contain a value * * ``` php * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); + * $I->dontSeeInCurrentUrl('/users/'); * ?> * ``` * - * @param $selector - * @param $optionText - * @return mixed + * @param $uri * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeOptionIsSelected() + * @see Codeception\Util\Mink::dontSeeInCurrentUrl() * @return \Codeception\Maybe */ - public function cantSeeOptionIsSelected($selector, $optionText) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeOptionIsSelected', func_get_args())); + public function cantSeeInCurrentUrl($uri) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeInCurrentUrl', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1788,22 +1184,20 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if option is not selected in select field. + * Checks that current uri does not contain a value * * ``` php * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); + * $I->dontSeeInCurrentUrl('/users/'); * ?> * ``` * - * @param $selector - * @param $optionText - * @return mixed - * @see Codeception\Module\WebDriver::dontSeeOptionIsSelected() + * @param $uri + * @see Codeception\Util\Mink::dontSeeInCurrentUrl() * @return \Codeception\Maybe */ - public function dontSeeOptionIsSelected($selector, $optionText) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeOptionIsSelected', func_get_args())); + public function dontSeeInCurrentUrl($uri) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeInCurrentUrl', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1817,22 +1211,23 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that page title contains text. + * Checks that current url is equal to value. + * Unlike `seeInCurrentUrl` performs a strict check. * * ``` php * seeInTitle('Blog - Post #1'); + * // to match root url + * $I->seeCurrentUrlEquals('/'); * ?> * ``` * - * @param $title - * @return mixed + * @param $uri * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeInTitle() + * @see Codeception\Util\Mink::seeCurrentUrlEquals() * @return \Codeception\Maybe */ - public function canSeeInTitle($title) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeInTitle', func_get_args())); + public function canSeeCurrentUrlEquals($uri) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlEquals', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1844,21 +1239,22 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that page title contains text. + * Checks that current url is equal to value. + * Unlike `seeInCurrentUrl` performs a strict check. * * ``` php * seeInTitle('Blog - Post #1'); + * // to match root url + * $I->seeCurrentUrlEquals('/'); * ?> * ``` * - * @param $title - * @return mixed - * @see Codeception\Module\WebDriver::seeInTitle() + * @param $uri + * @see Codeception\Util\Mink::seeCurrentUrlEquals() * @return \Codeception\Maybe */ - public function seeInTitle($title) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeInTitle', func_get_args())); + public function seeCurrentUrlEquals($uri) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeCurrentUrlEquals', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1872,16 +1268,23 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that page title does not contain text. + * Checks that current url is not equal to value. + * Unlike `dontSeeInCurrentUrl` performs a strict check. * - * @param $title - * @return mixed + * ``` php + * dontSeeCurrentUrlEquals('/'); + * ?> + * ``` + * + * @param $uri * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::dontSeeInTitle() + * @see Codeception\Util\Mink::dontSeeCurrentUrlEquals() * @return \Codeception\Maybe */ - public function cantSeeInTitle($title) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeInTitle', func_get_args())); + public function cantSeeCurrentUrlEquals($uri) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlEquals', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1893,15 +1296,22 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that page title does not contain text. + * Checks that current url is not equal to value. + * Unlike `dontSeeInCurrentUrl` performs a strict check. * - * @param $title - * @return mixed - * @see Codeception\Module\WebDriver::dontSeeInTitle() + * ``` php + * dontSeeCurrentUrlEquals('/'); + * ?> + * ``` + * + * @param $uri + * @see Codeception\Util\Mink::dontSeeCurrentUrlEquals() * @return \Codeception\Maybe */ - public function dontSeeInTitle($title) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeInTitle', func_get_args())); + public function dontSeeCurrentUrlEquals($uri) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlEquals', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1915,33 +1325,48 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Accepts JavaScript native popup window created by `window.alert`|`window.confirm`|`window.prompt`. - * Don't confuse it with modal windows, created by [various libraries](http://jster.net/category/windows-modals-popups). + * Checks that current url is matches a RegEx value + * + * ``` php + * seeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` * - * @see Codeception\Module\WebDriver::acceptPopup() + * @param $uri + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Util\Mink::seeCurrentUrlMatches() * @return \Codeception\Maybe */ - public function acceptPopup() { - $this->scenario->addStep(new \Codeception\Step\Action('acceptPopup', func_get_args())); + public function canSeeCurrentUrlMatches($uri) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlMatches', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Dismisses active JavaScript popup created by `window.alert`|`window.confirm`|`window.prompt`. - * @see Codeception\Module\WebDriver::cancelPopup() + * Checks that current url is matches a RegEx value + * + * ``` php + * seeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` + * + * @param $uri + * @see Codeception\Util\Mink::seeCurrentUrlMatches() * @return \Codeception\Maybe */ - public function cancelPopup() { - $this->scenario->addStep(new \Codeception\Step\Action('cancelPopup', func_get_args())); + public function seeCurrentUrlMatches($uri) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeCurrentUrlMatches', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1955,15 +1380,22 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that active JavaScript popup created by `window.alert`|`window.confirm`|`window.prompt` contain text. + * Checks that current url does not match a RegEx value + * + * ``` php + * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` * - * @param $text + * @param $uri * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\WebDriver::seeInPopup() + * @see Codeception\Util\Mink::dontSeeCurrentUrlMatches() * @return \Codeception\Maybe */ - public function canSeeInPopup($text) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeInPopup', func_get_args())); + public function cantSeeCurrentUrlMatches($uri) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlMatches', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1975,14 +1407,21 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that active JavaScript popup created by `window.alert`|`window.confirm`|`window.prompt` contain text. + * Checks that current url does not match a RegEx value * - * @param $text - * @see Codeception\Module\WebDriver::seeInPopup() + * ``` php + * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` + * + * @param $uri + * @see Codeception\Util\Mink::dontSeeCurrentUrlMatches() * @return \Codeception\Maybe */ - public function seeInPopup($text) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeInPopup', func_get_args())); + public function dontSeeCurrentUrlMatches($uri) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlMatches', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1996,33 +1435,36 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Enters text into native JavaScript prompt popup created by `window.prompt`. + * Checks that cookie is set. * - * @param $keys - * @see Codeception\Module\WebDriver::typeInPopup() + * @param $cookie + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Util\Mink::seeCookie() * @return \Codeception\Maybe */ - public function typeInPopup($keys) { - $this->scenario->addStep(new \Codeception\Step\Action('typeInPopup', func_get_args())); + public function canSeeCookie($cookie) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCookie', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Reloads current page - * @see Codeception\Module\WebDriver::reloadPage() + * Checks that cookie is set. + * + * @param $cookie + * @return mixed + * @see Codeception\Util\Mink::seeCookie() * @return \Codeception\Maybe */ - public function reloadPage() { - $this->scenario->addStep(new \Codeception\Step\Action('reloadPage', func_get_args())); + public function seeCookie($cookie) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeCookie', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2036,31 +1478,36 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Moves back in history - * @see Codeception\Module\WebDriver::moveBack() + * Checks that cookie doesn't exist + * + * @param $cookie + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Util\Mink::dontSeeCookie() * @return \Codeception\Maybe */ - public function moveBack() { - $this->scenario->addStep(new \Codeception\Step\Action('moveBack', func_get_args())); + public function cantSeeCookie($cookie) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCookie', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Moves forward in history - * @see Codeception\Module\WebDriver::moveForward() + * Checks that cookie doesn't exist + * + * @param $cookie + * @return mixed + * @see Codeception\Util\Mink::dontSeeCookie() * @return \Codeception\Maybe */ - public function moveForward() { - $this->scenario->addStep(new \Codeception\Step\Action('moveForward', func_get_args())); + public function dontSeeCookie($cookie) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCookie', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2074,47 +1521,16 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Submits a form located on page. - * Specify the form by it's css or xpath selector. - * Fill the form fields values as array. Hidden fields can't be accessed. - * - * This command itself triggers the request to form's action. - * - * Examples: - * - * ``` php - * submitForm('#login', array('login' => 'davert', 'password' => '123456')); - * - * ``` - * - * For sample Sign Up form: - * - * ``` html - *
- * Login:
- * Password:
- * Do you agree to out terms?
- * Select pricing plan - * - *
- * ``` - * You can write this: - * - * ``` php - * submitForm('#userForm', array('user' => array('login' => 'Davert', 'password' => '123456', 'agree' => true))); - * - * ``` + * Sets a cookie. * - * @param $selector - * @param $params - * @throws \Codeception\Exception\ElementNotFound - * @see Codeception\Module\WebDriver::submitForm() + * @param $cookie + * @param $value + * @return mixed + * @see Codeception\Util\Mink::setCookie() * @return \Codeception\Maybe */ - public function submitForm($selector, $params) { - $this->scenario->addStep(new \Codeception\Step\Action('submitForm', func_get_args())); + public function setCookie($cookie, $value) { + $this->scenario->addStep(new \Codeception\Step\Action('setCookie', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2128,25 +1544,15 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Waits until element has changed according to callback function or for $time seconds to pass. - * - * ``` php - * waitForElementChange('#menu', function(\WebDriverElement $el) { - * return $el->isDisplayed(); - * }, 100); - * ?> - * ``` + * Unsets cookie * - * @param $element - * @param \Closure $callback - * @param int $timeout seconds - * @throws \Codeception\Exception\ElementNotFound - * @see Codeception\Module\WebDriver::waitForElementChange() + * @param $cookie + * @return mixed + * @see Codeception\Util\Mink::resetCookie() * @return \Codeception\Maybe */ - public function waitForElementChange($element, $callback, $timeout = null) { - $this->scenario->addStep(new \Codeception\Step\Action('waitForElementChange', func_get_args())); + public function resetCookie($cookie) { + $this->scenario->addStep(new \Codeception\Step\Action('resetCookie', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2160,24 +1566,15 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Waits for element to appear on page for $timeout seconds to pass. - * If element not appears, timeout exception is thrown. - * - * ``` php - * waitForElement('#agree_button', 30); // secs - * $I->click('#agree_button'); - * ?> - * ``` + * Grabs a cookie value. * - * @param $element - * @param int $timeout seconds - * @throws \Exception - * @see Codeception\Module\WebDriver::waitForElement() + * @param $cookie + * @return mixed + * @see Codeception\Util\Mink::grabCookie() * @return \Codeception\Maybe */ - public function waitForElement($element, $timeout = null) { - $this->scenario->addStep(new \Codeception\Step\Action('waitForElement', func_get_args())); + public function grabCookie($cookie) { + $this->scenario->addStep(new \Codeception\Step\Action('grabCookie', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2191,24 +1588,24 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Waits for element to be visible on the page for $timeout seconds to pass. - * If element doesn't appear, timeout exception is thrown. + * Takes a parameters from current URI by RegEx. + * If no url provided returns full URI. * * ``` php * waitForElementVisible('#agree_button', 30); // secs - * $I->click('#agree_button'); + * $user_id = $I->grabFromCurrentUrl('~$/user/(\d+)/~'); + * $uri = $I->grabFromCurrentUrl(); * ?> * ``` * - * @param $element - * @param int $timeout seconds - * @throws \Exception - * @see Codeception\Module\WebDriver::waitForElementVisible() + * @param null $uri + * @internal param $url + * @return mixed + * @see Codeception\Util\Mink::grabFromCurrentUrl() * @return \Codeception\Maybe */ - public function waitForElementVisible($element, $timeout = null) { - $this->scenario->addStep(new \Codeception\Step\Action('waitForElementVisible', func_get_args())); + public function grabFromCurrentUrl($uri = null) { + $this->scenario->addStep(new \Codeception\Step\Action('grabFromCurrentUrl', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2222,23 +1619,24 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Waits for element to not be visible on the page for $timeout seconds to pass. - * If element stays visible, timeout exception is thrown. + * Attaches file from Codeception data directory to upload field. + * + * Example: * * ``` php * waitForElementNotVisible('#agree_button', 30); // secs + * // file is stored in 'tests/_data/prices.xls' + * $I->attachFile('input[@type="file"]', 'prices.xls'); * ?> * ``` * - * @param $element - * @param int $timeout seconds - * @throws \Exception - * @see Codeception\Module\WebDriver::waitForElementNotVisible() + * @param $field + * @param $filename + * @see Codeception\Util\Mink::attachFile() * @return \Codeception\Maybe */ - public function waitForElementNotVisible($element, $timeout = null) { - $this->scenario->addStep(new \Codeception\Step\Action('waitForElementNotVisible', func_get_args())); + public function attachFile($field, $filename) { + $this->scenario->addStep(new \Codeception\Step\Action('attachFile', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2252,48 +1650,50 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Waits for text to appear on the page for a specific amount of time. - * Can also be passed a selector to search in. - * If text does not appear, timeout exception is thrown. + * Checks if option is selected in select field. * * ``` php * waitForText('foo', 30); // secs - * $I->waitForText('foo', 30, '.title'); // secs + * $I->seeOptionIsSelected('#form input[name=payment]', 'Visa'); * ?> * ``` * - * @param string $text - * @param int $timeout seconds - * @param null $selector - * @throws \Exception - * @internal param string $element - * @see Codeception\Module\WebDriver::waitForText() + * @param $selector + * @param $optionText + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Util\Mink::seeOptionIsSelected() * @return \Codeception\Maybe */ - public function waitForText($text, $timeout = null, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\Action('waitForText', func_get_args())); + public function canSeeOptionIsSelected($select, $text) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeOptionIsSelected', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Explicit wait. + * Checks if option is selected in select field. + * + * ``` php + * seeOptionIsSelected('#form input[name=payment]', 'Visa'); + * ?> + * ``` * - * @param $timeout secs - * @see Codeception\Module\WebDriver::wait() + * @param $selector + * @param $optionText + * @return mixed + * @see Codeception\Util\Mink::seeOptionIsSelected() * @return \Codeception\Maybe */ - public function wait($timeout) { - $this->scenario->addStep(new \Codeception\Step\Action('wait', func_get_args())); + public function seeOptionIsSelected($select, $text) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeOptionIsSelected', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2307,75 +1707,50 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Low-level API method. - * If Codeception commands are not enough, use Selenium WebDriver methods directly + * Checks if option is not selected in select field. * * ``` php - * $I->executeInSelenium(function(\WebDriver $webdriver) { - * $webdriver->get('http://google.com'); - * }); + * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); + * ?> * ``` * - * Use [WebDriver Session API](https://github.com/facebook/php-webdriver) - * Not recommended this command too be used on regular basis. - * If Codeception lacks important Selenium methods implement then and submit patches. - * - * @param callable $function - * @see Codeception\Module\WebDriver::executeInSelenium() + * @param $selector + * @param $optionText + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Util\Mink::dontSeeOptionIsSelected() * @return \Codeception\Maybe */ - public function executeInSelenium($function) { - $this->scenario->addStep(new \Codeception\Step\Action('executeInSelenium', func_get_args())); + public function cantSeeOptionIsSelected($select, $text) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeOptionIsSelected', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Switch to another window identified by its name. - * - * The window can only be identified by its name. If the $name parameter is blank it will switch to the parent window. - * - * Example: - * ``` html - * - * ``` + * Checks if option is not selected in select field. * * ``` php * click("Open window"); - * # switch to another window - * $I->switchToWindow("another_window"); - * # switch to parent window - * $I->switchToWindow(); - * ?> - * ``` - * - * If the window has no name, the only way to access it is via the `executeInSelenium()` method like so: - * - * ``` - * executeInSelenium(function (\Webdriver $webdriver) { - * $handles=$webDriver->getWindowHandles(); - * $last_window = end($handles); - * $webDriver->switchTo()->window($name); - * }); + * $I->dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); * ?> * ``` * - * @param string|null $name - * @see Codeception\Module\WebDriver::switchToWindow() + * @param $selector + * @param $optionText + * @return mixed + * @see Codeception\Util\Mink::dontSeeOptionIsSelected() * @return \Codeception\Maybe */ - public function switchToWindow($name = null) { - $this->scenario->addStep(new \Codeception\Step\Action('switchToWindow', func_get_args())); + public function dontSeeOptionIsSelected($select, $text) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeOptionIsSelected', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -2389,59 +1764,62 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Switch to another frame + * Checks that an input field or textarea contains value. + * Field is matched either by label or CSS or Xpath * * Example: - * ``` html - *