From 3cc55c2cfa3f93fca106aedc6e2b50c251896695 Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 2 Dec 2013 15:23:32 +0400 Subject: [PATCH 01/10] codeception configs, web config modifed for db-settings --- apps/basic/config/codeception/acceptance.php | 3 +++ apps/basic/config/codeception/functional.php | 3 +++ apps/basic/config/codeception/unit.php | 13 +++++++++++++ apps/basic/config/web.php | 11 +++++++++++ 4 files changed, 30 insertions(+) create mode 100644 apps/basic/config/codeception/acceptance.php create mode 100644 apps/basic/config/codeception/functional.php create mode 100644 apps/basic/config/codeception/unit.php diff --git a/apps/basic/config/codeception/acceptance.php b/apps/basic/config/codeception/acceptance.php new file mode 100644 index 0000000..0b67a5f --- /dev/null +++ b/apps/basic/config/codeception/acceptance.php @@ -0,0 +1,3 @@ + [ + 'fixture' => [ + 'class' => 'yii\test\DbFixtureManager', + 'basePath' => '@app/tests/unit/fixtures', + ], + 'db' => [ + 'dsn' => 'mysql:host=localhost;dbname=yii2basic_unit', + ], + ], +]; diff --git a/apps/basic/config/web.php b/apps/basic/config/web.php index 6124c4f..a5f7b75 100644 --- a/apps/basic/config/web.php +++ b/apps/basic/config/web.php @@ -1,5 +1,9 @@ 'basic', 'basePath' => dirname(__DIR__), @@ -26,6 +30,13 @@ $config = [ ], ], ], + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=yii2basic', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + ], ], 'params' => $params, ]; From 5c86563a08726f406417fef799d25c4854d02ea2 Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 2 Dec 2013 15:23:58 +0400 Subject: [PATCH 02/10] new entry points for application --- apps/basic/web/index-debug.php | 13 +++++++++++++ apps/basic/web/index-test-accept.php | 16 ++++++++++++++++ apps/basic/web/index-test-func.php | 16 ++++++++++++++++ apps/basic/web/index-test.php | 24 ------------------------ apps/basic/web/index.php | 4 ++-- 5 files changed, 47 insertions(+), 26 deletions(-) create mode 100644 apps/basic/web/index-debug.php create mode 100644 apps/basic/web/index-test-accept.php create mode 100644 apps/basic/web/index-test-func.php delete mode 100644 apps/basic/web/index-test.php diff --git a/apps/basic/web/index-debug.php b/apps/basic/web/index-debug.php new file mode 100644 index 0000000..e9eeb33 --- /dev/null +++ b/apps/basic/web/index-debug.php @@ -0,0 +1,13 @@ +run(); diff --git a/apps/basic/web/index-test-accept.php b/apps/basic/web/index-test-accept.php new file mode 100644 index 0000000..4343726 --- /dev/null +++ b/apps/basic/web/index-test-accept.php @@ -0,0 +1,16 @@ +run(); diff --git a/apps/basic/web/index-test-func.php b/apps/basic/web/index-test-func.php new file mode 100644 index 0000000..ebce924 --- /dev/null +++ b/apps/basic/web/index-test-func.php @@ -0,0 +1,16 @@ +run(); -} diff --git a/apps/basic/web/index.php b/apps/basic/web/index.php index e9eeb33..c644d40 100644 --- a/apps/basic/web/index.php +++ b/apps/basic/web/index.php @@ -1,8 +1,8 @@ Date: Mon, 2 Dec 2013 15:24:33 +0400 Subject: [PATCH 03/10] colors added --- apps/basic/codeception.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/basic/codeception.yml b/apps/basic/codeception.yml index b6adeb5..864fba0 100644 --- a/apps/basic/codeception.yml +++ b/apps/basic/codeception.yml @@ -8,6 +8,7 @@ settings: suite_class: \PHPUnit_Framework_TestSuite memory_limit: 1024M log: true + colors: true modules: config: Db: From 44e515b4f755ab8efb18779eaa9afeee7aa0e5ad Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 2 Dec 2013 15:25:21 +0400 Subject: [PATCH 04/10] tests modified, bootstrap added --- apps/basic/tests/_bootstrap.php | 1 + apps/basic/tests/_pages/AboutPage.php | 10 + apps/basic/tests/_pages/BasePage.php | 45 + apps/basic/tests/_pages/ContactPage.php | 63 + apps/basic/tests/_pages/LoginPage.php | 40 + apps/basic/tests/acceptance.suite.dist.yml | 7 +- apps/basic/tests/acceptance/AboutCept.php | 4 +- apps/basic/tests/acceptance/ContactCept.php | 38 +- apps/basic/tests/acceptance/LoginCept.php | 33 +- apps/basic/tests/acceptance/WebGuy.php | 2189 +++++++++++++------- apps/basic/tests/acceptance/_bootstrap.php | 9 + apps/basic/tests/functional.suite.dist.yml | 4 +- apps/basic/tests/functional/AboutCept.php | 5 +- apps/basic/tests/functional/ContactCept.php | 37 +- apps/basic/tests/functional/LoginCept.php | 32 +- apps/basic/tests/functional/TestGuy.php | 121 +- apps/basic/tests/functional/_bootstrap.php | 10 +- apps/basic/tests/functional/_pages/ContactPage.php | 56 + apps/basic/tests/functional/_pages/LoginPage.php | 33 + apps/basic/tests/unit/CodeGuy.php | 19 +- apps/basic/tests/unit/_bootstrap.php | 10 +- apps/basic/tests/unit/models/ContactFormTest.php | 16 + apps/basic/tests/unit/models/LoginFormTest.php | 16 + apps/basic/tests/unit/models/UserTest.php | 27 + apps/basic/tests/yii_bootstrap.php | 10 + 25 files changed, 1959 insertions(+), 876 deletions(-) create mode 100644 apps/basic/tests/_bootstrap.php create mode 100644 apps/basic/tests/_pages/AboutPage.php create mode 100644 apps/basic/tests/_pages/BasePage.php create mode 100644 apps/basic/tests/_pages/ContactPage.php create mode 100644 apps/basic/tests/_pages/LoginPage.php create mode 100644 apps/basic/tests/functional/_pages/ContactPage.php create mode 100644 apps/basic/tests/functional/_pages/LoginPage.php create mode 100644 apps/basic/tests/unit/models/ContactFormTest.php create mode 100644 apps/basic/tests/unit/models/LoginFormTest.php create mode 100644 apps/basic/tests/unit/models/UserTest.php create mode 100644 apps/basic/tests/yii_bootstrap.php diff --git a/apps/basic/tests/_bootstrap.php b/apps/basic/tests/_bootstrap.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/apps/basic/tests/_bootstrap.php @@ -0,0 +1 @@ +guy = $I; + } + + /** + * @return $this + */ + public static function of($I) + { + return new static($I); + } + +} diff --git a/apps/basic/tests/_pages/ContactPage.php b/apps/basic/tests/_pages/ContactPage.php new file mode 100644 index 0000000..b5694c2 --- /dev/null +++ b/apps/basic/tests/_pages/ContactPage.php @@ -0,0 +1,63 @@ +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 new file mode 100644 index 0000000..87d5e99 --- /dev/null +++ b/apps/basic/tests/_pages/LoginPage.php @@ -0,0 +1,40 @@ +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 index 4965d89..78d590c 100644 --- a/apps/basic/tests/acceptance.suite.dist.yml +++ b/apps/basic/tests/acceptance.suite.dist.yml @@ -11,8 +11,9 @@ class_name: WebGuy modules: enabled: - - PhpBrowser - WebHelper + - WebDriver config: - PhpBrowser: - url: 'http://localhost/index-test.php' + WebDriver: + url: 'http://localhost/basic/web/index-test-accept.php' + browser: firefox diff --git a/apps/basic/tests/acceptance/AboutCept.php b/apps/basic/tests/acceptance/AboutCept.php index 65102c7..7e95f80 100644 --- a/apps/basic/tests/acceptance/AboutCept.php +++ b/apps/basic/tests/acceptance/AboutCept.php @@ -1,5 +1,7 @@ wantTo('ensure that about works'); -$I->amOnPage('?r=site/about'); +$I->amOnPage(AboutPage::$URL); $I->see('About', 'h1'); diff --git a/apps/basic/tests/acceptance/ContactCept.php b/apps/basic/tests/acceptance/ContactCept.php index 5ec5641..de7e642 100644 --- a/apps/basic/tests/acceptance/ContactCept.php +++ b/apps/basic/tests/acceptance/ContactCept.php @@ -1,10 +1,16 @@ wantTo('ensure that contact works'); -$I->amOnPage('?r=site/contact'); +$contactPage = ContactPage::of($I); + +$I->amOnPage(ContactPage::$URL); $I->see('Contact', 'h1'); -$I->submitForm('#contact-form', []); +$I->amGoingTo('submit contact form with no data'); +$contactPage->submit([]); +$I->expectTo('see validations errors'); $I->see('Contact', 'h1'); $I->see('Name cannot be blank'); $I->see('Email cannot be blank'); @@ -12,25 +18,29 @@ $I->see('Subject cannot be blank'); $I->see('Body cannot be blank'); $I->see('The verification code is incorrect'); -$I->submitForm('#contact-form', [ - 'ContactForm[name]' => 'tester', - 'ContactForm[email]' => 'tester.email', - 'ContactForm[subject]' => 'test subject', - 'ContactForm[body]' => 'test content', - 'ContactForm[verifyCode]' => 'testme', +$I->amGoingTo('submit contact form with not correct email'); +$contactPage->submit([ + 'name' => 'tester', + 'email' => 'tester.email', + 'subject' => 'test subject', + 'body' => 'test content', + 'verifyCode' => 'testme', ]); +$I->expectTo('see that email adress is wrong'); $I->dontSee('Name cannot be blank', '.help-inline'); $I->see('Email is not a valid email address.'); $I->dontSee('Subject cannot be blank', '.help-inline'); $I->dontSee('Body cannot be blank', '.help-inline'); $I->dontSee('The verification code is incorrect', '.help-inline'); -$I->submitForm('#contact-form', [ - 'ContactForm[name]' => 'tester', - 'ContactForm[email]' => 'tester@example.com', - 'ContactForm[subject]' => 'test subject', - 'ContactForm[body]' => 'test content', - 'ContactForm[verifyCode]' => 'testme', +$I->amGoingTo('submit contact form with correct data'); +$contactPage->submit([ + 'name' => 'tester', + 'email' => 'tester@example.com', + 'subject' => 'test subject', + 'body' => 'test content', + 'verifyCode' => 'testme', ]); +$I->wait(3); $I->dontSeeElement('#contact-form'); $I->see('Thank you for contacting us. We will respond to you as soon as possible.'); diff --git a/apps/basic/tests/acceptance/LoginCept.php b/apps/basic/tests/acceptance/LoginCept.php index 5621b15..ba939ff 100644 --- a/apps/basic/tests/acceptance/LoginCept.php +++ b/apps/basic/tests/acceptance/LoginCept.php @@ -1,23 +1,26 @@ wantTo('ensure that login works'); -$I->amOnPage('?r=site/login'); +$loginPage = LoginPage::of($I); + +$I->amOnPage(LoginPage::$URL); $I->see('Login', 'h1'); -$I->submitForm('#login-form', []); -$I->dontSee('Logout (admin)'); -$I->see('Username cannot be blank'); -$I->see('Password cannot be blank'); +$I->amGoingTo('try to login with empty credentials'); +$loginPage->login('', ''); +$I->expectTo('see validations errors'); +$I->see('Username cannot be blank.'); +$I->see('Password cannot be blank.'); -$I->submitForm('#login-form', [ - 'LoginForm[username]' => 'admin', - 'LoginForm[password]' => 'wrong', -]); -$I->dontSee('Logout (admin)'); -$I->see('Incorrect username or password'); +$I->amGoingTo('try to login with wrong credentials'); +$loginPage->login('admin', 'wrong'); +$I->expectTo('see validations errors'); +$I->see('Incorrect username or password.'); -$I->submitForm('#login-form', [ - 'LoginForm[username]' => 'admin', - 'LoginForm[password]' => 'admin', -]); +$I->amGoingTo('try to login with correct credentials'); +$loginPage->login('admin', 'admin'); +$I->wait(3); +$I->expectTo('see user info'); $I->see('Logout (admin)'); diff --git a/apps/basic/tests/acceptance/WebGuy.php b/apps/basic/tests/acceptance/WebGuy.php index 5f74a2c..77fd17a 100644 --- a/apps/basic/tests/acceptance/WebGuy.php +++ b/apps/basic/tests/acceptance/WebGuy.php @@ -5,8 +5,8 @@ use \Codeception\Maybe; -use Codeception\Module\PhpBrowser; use Codeception\Module\WebHelper; +use Codeception\Module\WebDriver; /** * Inherited methods @@ -26,91 +26,767 @@ use Codeception\Module\WebHelper; class WebGuy extends \Codeception\AbstractGuy { + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * + * @see Codeception\Module::getName() + * @return \Codeception\Maybe + */ + public function getName() { + $this->scenario->addStep(new \Codeception\Step\Action('getName', 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. + * ---------------------------------------------- + * + * Sets 'url' configuration parameter to hosts subdomain. + * It does not open a page on subdomain. Use `amOnPage` for that + * + * ``` php + * 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`. + * + * ``` php + * amOnPage('/user/edit'); + * $I->makeScreenshot('edit page'); + * // saved to: tests/_log/debug/UserEdit - edit page.png + * ?> + * ``` + * + * @param $name + * @see Codeception\Module\WebDriver::makeScreenshot() + * @return \Codeception\Maybe + */ + public function makeScreenshot($name) { + $this->scenario->addStep(new \Codeception\Step\Action('makeScreenshot', 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. + * ---------------------------------------------- + * + * Resize current window + * + * Example: + * ``` php + * resizeWindow(800, 600); + * + * ``` + * + * @param int $width + * @param int $height + * @see Codeception\Module\WebDriver::resizeWindow() + * @return \Codeception\Maybe + */ + public function resizeWindow($width, $height) { + $this->scenario->addStep(new \Codeception\Step\Action('resizeWindow', 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. + * + * @param $cookie + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::seeCookie() + * @return \Codeception\Maybe + */ + 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. + * ---------------------------------------------- + * + * Checks that cookie is set. + * + * @param $cookie + * @return mixed + * @see Codeception\Module\WebDriver::seeCookie() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * Checks that cookie doesn't exist + * + * @param $cookie + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::dontSeeCookie() + * @return \Codeception\Maybe + */ + 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. + * ---------------------------------------------- + * + * Checks that cookie doesn't exist + * + * @param $cookie + * @return mixed + * @see Codeception\Module\WebDriver::dontSeeCookie() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * Sets a cookie. + * + * @param $cookie + * @param $value + * @return mixed + * @see Codeception\Module\WebDriver::setCookie() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * Unsets cookie + * + * @param $cookie + * @return mixed + * @see Codeception\Module\WebDriver::resetCookie() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * Grabs a cookie value. + * + * @param $cookie + * @return mixed + * @see Codeception\Module\WebDriver::grabCookie() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * Opens the page. + * Requires relative uri as parameter + * + * Example: + * + * ``` php + * amOnPage('/'); + * // opens /register page + * $I->amOnPage('/register'); + * ?> + * ``` + * + * @param $page + * @see Codeception\Module\WebDriver::amOnPage() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * 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 + * ?> + * ``` + * + * @param $text + * @param null $selector + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::see() + * @return \Codeception\Maybe + */ + 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. + * ---------------------------------------------- + * + * 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 + * ?> + * ``` + * + * @param $text + * @param null $selector + * @see Codeception\Module\WebDriver::see() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * Check if current page doesn't contain the text specified. + * Specify the css selector to match only specific region. + * + * Examples: + * + * ```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 + * ?> + * ``` + * + * @param $text + * @param null $selector + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::dontSee() + * @return \Codeception\Maybe + */ + 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. + * ---------------------------------------------- + * + * Check if current page doesn't contain the text specified. + * Specify the css selector to match only specific region. + * + * Examples: + * + * ```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 + * ?> + * ``` + * + * @param $text + * @param null $selector + * @see Codeception\Module\WebDriver::dontSee() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * 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: + * + * ``` 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() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + /** * This method is generated. * 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. + * Checks if there is a link with text specified. + * Specify url to match link with exact this url. * - * Skipped fields will be filled by their values from page. - * You don't need to click the 'Submit' button afterwards. - * This command itself triggers the request to form's action. + * Examples: + * + * ``` php + * seeLink('Logout'); // matches Logout + * $I->seeLink('Logout','/logout'); // matches Logout + * ?> + * ``` + * + * @param $text + * @param null $url + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::seeLink() + * @return \Codeception\Maybe + */ + 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. + * ---------------------------------------------- + * + * Checks if there is a link with text specified. + * Specify url to match link with exact this url. * * Examples: * * ``` php * submitForm('#login', array('login' => 'davert', 'password' => '123456')); + * $I->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 + * ?> * ``` * - * For sample Sign Up form: + * @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. + * ---------------------------------------------- * - * ``` html - *
- * Login:
- * Password:
- * Do you agree to out terms?
- * Select pricing plan - * - *
+ * 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('/'); + * ?> * ``` - * I can write this: + * + * @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 * submitForm('#userForm', array('user' => array('login' => 'Davert', 'password' => '123456', 'agree' => true))); - * + * // to match root url + * $I->seeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> * ``` - * Note, that pricing plan will be set to Paid, as it's selected on page. * - * @param $selector - * @param $params - * @see Codeception\Module\PhpBrowser::submitForm() + * @param $uri + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::seeCurrentUrlMatches() * @return \Codeception\Maybe */ - public function submitForm($selector, $params) { - $this->scenario->addStep(new \Codeception\Step\Action('submitForm', 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. * ---------------------------------------------- * - * 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. + * Checks that current url is matches a RegEx value * * ``` php * sendAjaxPostRequest('/updateSettings', array('notifications' => true); // POST - * $I->sendAjaxGetRequest('/updateSettings', array('notifications' => true); // GET - * + * // to match root url + * $I->seeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> * ``` * * @param $uri - * @param $params - * @see Codeception\Module\PhpBrowser::sendAjaxPostRequest() + * @see Codeception\Module\WebDriver::seeCurrentUrlMatches() * @return \Codeception\Maybe */ - public function sendAjaxPostRequest($uri, $params = null) { - $this->scenario->addStep(new \Codeception\Step\Action('sendAjaxPostRequest', 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); @@ -118,126 +794,164 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * If your page triggers an ajax request, you can perform it manually. - * This action sends a GET ajax request with specified params. + * Checks that current uri does not contain a value * - * See ->sendAjaxPostRequest for examples. + * ``` php + * dontSeeInCurrentUrl('/users/'); + * ?> + * ``` * * @param $uri - * @param $params - * @see Codeception\Module\PhpBrowser::sendAjaxGetRequest() + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::dontSeeInCurrentUrl() * @return \Codeception\Maybe */ - public function sendAjaxGetRequest($uri, $params = null) { - $this->scenario->addStep(new \Codeception\Step\Action('sendAjaxGetRequest', 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); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Asserts that current page has 404 response status code. - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\PhpBrowser::seePageNotFound() + * Checks that current uri does not contain a value + * + * ``` php + * dontSeeInCurrentUrl('/users/'); + * ?> + * ``` + * + * @param $uri + * @see Codeception\Module\WebDriver::dontSeeInCurrentUrl() * @return \Codeception\Maybe */ - public function canSeePageNotFound() { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seePageNotFound', 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); } return new Maybe(); } + + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Asserts that current page has 404 response status code. - * @see Codeception\Module\PhpBrowser::seePageNotFound() + * 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 seePageNotFound() { - $this->scenario->addStep(new \Codeception\Step\Assertion('seePageNotFound', 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); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that response code is equal to value provided. + * Checks that current url is not equal to value. + * Unlike `dontSeeInCurrentUrl` performs a strict check. * - * @param $code - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\PhpBrowser::seeResponseCodeIs() + * ``` php + * dontSeeCurrentUrlEquals('/'); + * ?> + * ``` + * + * @param $uri + * @see Codeception\Module\WebDriver::dontSeeCurrentUrlEquals() * @return \Codeception\Maybe */ - public function canSeeResponseCodeIs($code) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeResponseCodeIs', 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); } return new Maybe(); } + + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that response code is equal to value provided. + * Checks that current url does not match a RegEx value * - * @param $code - * @return mixed - * @see Codeception\Module\PhpBrowser::seeResponseCodeIs() + * ``` 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 seeResponseCodeIs($code) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeResponseCodeIs', 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); } return new Maybe(); } - - /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Adds HTTP authentication via username/password. + * Checks that current url does not match a RegEx value + * + * ``` php + * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` * - * @param $username - * @param $password - * @see Codeception\Module\PhpBrowser::amHttpAuthenticated() + * @param $uri + * @see Codeception\Module\WebDriver::dontSeeCurrentUrlMatches() * @return \Codeception\Maybe */ - public function amHttpAuthenticated($username, $password) { - $this->scenario->addStep(new \Codeception\Step\Condition('amHttpAuthenticated', 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); @@ -245,41 +959,30 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Low-level API method. - * If Codeception commands are not enough, use [Guzzle HTTP Client](http://guzzlephp.org/) methods directly - * - * Example: + * Takes a parameters from current URI by RegEx. + * If no url provided returns full URI. * * ``` php * 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' => '***' - * ))); - * }); + * $user_id = $I->grabFromCurrentUrl('~$/user/(\d+)/~'); + * $uri = $I->grabFromCurrentUrl(); * ?> * ``` * - * 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() + * @param null $uri + * @internal param $url + * @return mixed + * @see Codeception\Module\WebDriver::grabFromCurrentUrl() * @return \Codeception\Maybe */ - public function executeInGuzzle($function) { - $this->scenario->addStep(new \Codeception\Step\Action('executeInGuzzle', 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); @@ -287,7 +990,7 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. @@ -308,7 +1011,7 @@ class WebGuy extends \Codeception\AbstractGuy * * @param $checkbox * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\PhpBrowser::seeCheckboxIsChecked() + * @see Codeception\Module\WebDriver::seeCheckboxIsChecked() * @return \Codeception\Maybe */ public function canSeeCheckboxIsChecked($checkbox) { @@ -338,7 +1041,7 @@ class WebGuy extends \Codeception\AbstractGuy * ``` * * @param $checkbox - * @see Codeception\Module\PhpBrowser::seeCheckboxIsChecked() + * @see Codeception\Module\WebDriver::seeCheckboxIsChecked() * @return \Codeception\Maybe */ public function seeCheckboxIsChecked($checkbox) { @@ -350,7 +1053,7 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. @@ -370,7 +1073,7 @@ class WebGuy extends \Codeception\AbstractGuy * * @param $checkbox * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Module\PhpBrowser::dontSeeCheckboxIsChecked() + * @see Codeception\Module\WebDriver::dontSeeCheckboxIsChecked() * @return \Codeception\Maybe */ public function cantSeeCheckboxIsChecked($checkbox) { @@ -399,7 +1102,7 @@ class WebGuy extends \Codeception\AbstractGuy * ``` * * @param $checkbox - * @see Codeception\Module\PhpBrowser::dontSeeCheckboxIsChecked() + * @see Codeception\Module\WebDriver::dontSeeCheckboxIsChecked() * @return \Codeception\Maybe */ public function dontSeeCheckboxIsChecked($checkbox) { @@ -411,54 +1114,68 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Opens the page. + * Checks that an input field or textarea contains value. + * Field is matched either by label or CSS or Xpath * - * @param $page - * @see Codeception\Util\Mink::amOnPage() + * 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 amOnPage($page) { - $this->scenario->addStep(new \Codeception\Step\Condition('amOnPage', func_get_args())); + 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. * ---------------------------------------------- * - * Sets 'url' configuration parameter to hosts subdomain. - * It does not open a page on subdomain. Use `amOnPage` for that + * Checks that an input field or textarea contains value. + * Field is matched either by label or CSS or Xpath + * + * Example: * * ``` php * amOnSubdomain('user'); - * $I->amOnPage('/'); - * // moves to http://user.mysite.com/ + * $I->seeInField('Body','Type your comment here'); + * $I->seeInField('form textarea[name=body]','Type your comment here'); + * $I->seeInField('form input[type=hidden]','hidden_value'); + * $I->seeInField('#searchform input','Search'); + * $I->seeInField('//form/*[@name=search]','Search'); * ?> * ``` - * @param $subdomain - * @return mixed - * @see Codeception\Util\Mink::amOnSubdomain() + * + * @param $field + * @param $value + * @see Codeception\Module\WebDriver::seeInField() * @return \Codeception\Maybe */ - public function amOnSubdomain($subdomain) { - $this->scenario->addStep(new \Codeception\Step\Condition('amOnSubdomain', func_get_args())); + 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); @@ -466,22 +1183,34 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * @param string $text - * @param string $selector + * 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'); + * ?> + * ``` * - * @return void + * @param $field + * @param $value * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::dontSee() + * @see Codeception\Module\WebDriver::dontSeeInField() * @return \Codeception\Maybe */ - public function cantSee($text, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSee', func_get_args())); + 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); @@ -493,15 +1222,27 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * @param string $text - * @param string $selector + * 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'); + * ?> + * ``` * - * @return void - * @see Codeception\Util\Mink::dontSee() + * @param $field + * @param $value + * @see Codeception\Module\WebDriver::dontSeeInField() * @return \Codeception\Maybe */ - public function dontSee($text, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSee', func_get_args())); + public function dontSeeInField($field, $value) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeInField', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -509,64 +1250,88 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Check if current page contains the text specified. - * Specify the css selector to match only specific region. + * Selects an option in select tag or in radio button group. * - * 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->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 $text - * @param null $selector - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::see() + * @param $select + * @param $option + * @see Codeception\Module\WebDriver::selectOption() + * @return \Codeception\Maybe + */ + 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); + } + return new Maybe(); + } + + + /** + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- + * + * + * @see Codeception\Module\WebDriver::unselectOption() * @return \Codeception\Maybe */ - public function canSee($text, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('see', func_get_args())); + public function unselectOption($select, $option) { + $this->scenario->addStep(new \Codeception\Step\Action('unselectOption', 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. * ---------------------------------------------- * - * Check if current page contains the text specified. - * Specify the css selector to match only specific region. + * Ticks a checkbox. + * For radio buttons use `selectOption` method. * - * 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->checkOption('#agree'); * ?> * ``` * - * @param $text - * @param null $selector - * @see Codeception\Util\Mink::see() + * @param $option + * @see Codeception\Module\WebDriver::checkOption() * @return \Codeception\Maybe */ - public function see($text, $selector = null) { - $this->scenario->addStep(new \Codeception\Step\Assertion('see', 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); @@ -574,62 +1339,58 @@ class WebGuy extends \Codeception\AbstractGuy 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. + * Unticks a checkbox. * - * Examples: + * Example: * * ``` php * seeLink('Logout'); // matches Logout - * $I->seeLink('Logout','/logout'); // matches Logout + * $I->uncheckOption('#notify'); * ?> * ``` * - * @param $text - * @param null $url - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::seeLink() + * @param $option + * @see Codeception\Module\WebDriver::uncheckOption() * @return \Codeception\Maybe */ - public function canSeeLink($text, $url = null) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeLink', 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); } 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: - * + * Fills a text field or textarea with value. + * + * Example: + * * ``` php * seeLink('Logout'); // matches Logout - * $I->seeLink('Logout','/logout'); // matches Logout + * $I->fillField("//input[@type='text']", "Hello World!"); * ?> * ``` * - * @param $text - * @param null $url - * @see Codeception\Util\Mink::seeLink() + * @param $field + * @param $value + * @see Codeception\Module\WebDriver::fillField() * @return \Codeception\Maybe */ - public function seeLink($text, $url = null) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeLink', 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); @@ -637,60 +1398,63 @@ class WebGuy extends \Codeception\AbstractGuy 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. + * Attaches file from Codeception data directory to upload field. * - * Examples: + * Example: * * ``` php * dontSeeLink('Logout'); // I suppose user is not logged in + * // file is stored in 'tests/_data/prices.xls' + * $I->attachFile('input[@type="file"]', 'prices.xls'); * ?> * ``` * - * @param $text - * @param null $url - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::dontSeeLink() + * @param $field + * @param $filename + * @see Codeception\Module\WebDriver::attachFile() * @return \Codeception\Maybe */ - public function cantSeeLink($text, $url = null) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeLink', 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); } 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. + * Finds and returns text contents of element. + * Element is searched by CSS selector, XPath or matcher by regex. * - * Examples: + * Example: * * ``` php * dontSeeLink('Logout'); // I suppose user is not logged in + * $heading = $I->grabTextFrom('h1'); + * $heading = $I->grabTextFrom('descendant-or-self::h1'); + * $value = $I->grabTextFrom('~ * ``` * - * @param $text - * @param null $url - * @see Codeception\Util\Mink::dontSeeLink() + * @param $cssOrXPathOrRegex + * @return mixed + * @see Codeception\Module\WebDriver::grabTextFrom() * @return \Codeception\Maybe */ - public function dontSeeLink($text, $url = null) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeLink', func_get_args())); + public function grabTextFrom($cssOrXPathOrRegex) { + $this->scenario->addStep(new \Codeception\Step\Action('grabTextFrom', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -698,45 +1462,32 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * 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. + * Finds and returns field and returns it's value. + * Searches by field name, then by CSS, then by XPath * - * Examples: + * Example: * * ``` 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'); + * $name = $I->grabValueFrom('Name'); + * $name = $I->grabValueFrom('input[name=username]'); + * $name = $I->grabValueFrom('descendant-or-self::form/descendant::input[@name = 'username']'); * ?> * ``` - * @param $link - * @param $context - * @see Codeception\Util\Mink::click() + * + * @param $field + * @return mixed + * @see Codeception\Module\WebDriver::grabValueFrom() * @return \Codeception\Maybe */ - public function click($link, $context = null) { - $this->scenario->addStep(new \Codeception\Step\Action('click', func_get_args())); + public function grabValueFrom($field) { + $this->scenario->addStep(new \Codeception\Step\Action('grabValueFrom', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -744,13 +1495,13 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if element exists on a page, matching it by CSS or XPath + * Checks for a visible element on a page, matching it by CSS or XPath * * ``` php * * ``` * @param $selector - * @see Codeception\Util\Mink::seeElement() + * @see Codeception\Module\WebDriver::seeElement() * @return \Codeception\Maybe */ public function seeElement($selector) { @@ -797,15 +1548,13 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if element does not exist (or is visible) on a page, matching it by CSS or XPath - * - * Example: + * Checks that element is invisible or not present on page. * * ``` php * dontSeeElement('//form/input[1]'); * ?> * ``` + * * @param $selector * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::dontSeeElement() + * @see Codeception\Module\WebDriver::dontSeeElement() * @return \Codeception\Maybe */ public function cantSeeElement($selector) { @@ -831,9 +1581,7 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if element does not exist (or is visible) on a page, matching it by CSS or XPath - * - * Example: + * Checks that element is invisible or not present on page. * * ``` php * dontSeeElement('//form/input[1]'); * ?> * ``` + * * @param $selector - * @see Codeception\Util\Mink::dontSeeElement() + * @see Codeception\Module\WebDriver::dontSeeElement() * @return \Codeception\Maybe */ public function dontSeeElement($selector) { @@ -854,126 +1603,52 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - - /** - * This method is generated. - * Documentation taken from corresponding module. - * ---------------------------------------------- - * - * 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: + * Checks if element exists on a page even it is invisible. * * ``` php * fillField("//input[@type='text']", "Hello World!"); + * $I->seeElementInDOM('//form/input[type=hidden]'); * ?> * ``` * - * @param $field - * @param $value - * @see Codeception\Util\Mink::fillField() + * @param $selector + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::seeElementInDOM() * @return \Codeception\Maybe */ - public function fillField($field, $value) { - $this->scenario->addStep(new \Codeception\Step\Action('fillField', func_get_args())); + public function canSeeElementInDOM($selector) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeElementInDOM', 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: + * Checks if element exists on a page even it is invisible. * * ``` php * selectOption('Which OS do you use?', array('Windows','Linux')); + * $I->seeElementInDOM('//form/input[type=hidden]'); * ?> * ``` * - * @param $select - * @param $option - * @see Codeception\Util\Mink::selectOption() + * @param $selector + * @see Codeception\Module\WebDriver::seeElementInDOM() * @return \Codeception\Maybe */ - public function selectOption($select, $option) { - $this->scenario->addStep(new \Codeception\Step\Action('selectOption', func_get_args())); + public function seeElementInDOM($selector) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeElementInDOM', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -981,58 +1656,40 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Ticks a checkbox. - * For radio buttons use `selectOption` method. - * - * Example: - * - * ``` php - * checkOption('#agree'); - * ?> - * ``` + * Opposite to `seeElementInDOM`. * - * @param $option - * @see Codeception\Util\Mink::checkOption() + * @param $selector + * Conditional Assertion: Test won't be stopped on fail + * @see Codeception\Module\WebDriver::dontSeeElementInDOM() * @return \Codeception\Maybe */ - public function checkOption($option) { - $this->scenario->addStep(new \Codeception\Step\Action('checkOption', func_get_args())); + public function cantSeeElementInDOM($selector) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeElementInDOM', 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. - * ---------------------------------------------- - * - * Unticks a checkbox. - * - * Example: + * This method is generated. + * Documentation taken from corresponding module. + * ---------------------------------------------- * - * ``` php - * uncheckOption('#notify'); - * ?> - * ``` + * Opposite to `seeElementInDOM`. * - * @param $option - * @see Codeception\Util\Mink::uncheckOption() + * @param $selector + * @see Codeception\Module\WebDriver::dontSeeElementInDOM() * @return \Codeception\Maybe */ - public function uncheckOption($option) { - $this->scenario->addStep(new \Codeception\Step\Action('uncheckOption', func_get_args())); + public function dontSeeElementInDOM($selector) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeElementInDOM', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1040,30 +1697,29 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that current uri contains a value + * Checks if option is selected in select field. * * ``` php * seeInCurrentUrl('home'); - * // to match: /users/1 - * $I->seeInCurrentUrl('/users/'); + * $I->seeOptionIsSelected('#form input[name=payment]', 'Visa'); * ?> * ``` * - * @param $uri + * @param $selector + * @param $optionText + * @return mixed * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::seeInCurrentUrl() + * @see Codeception\Module\WebDriver::seeOptionIsSelected() * @return \Codeception\Maybe */ - public function canSeeInCurrentUrl($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeInCurrentUrl', func_get_args())); + public function canSeeOptionIsSelected($selector, $optionText) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeOptionIsSelected', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1075,23 +1731,22 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that current uri contains a value + * Checks if option is selected in select field. * * ``` php * seeInCurrentUrl('home'); - * // to match: /users/1 - * $I->seeInCurrentUrl('/users/'); + * $I->seeOptionIsSelected('#form input[name=payment]', 'Visa'); * ?> * ``` * - * @param $uri - * @see Codeception\Util\Mink::seeInCurrentUrl() + * @param $selector + * @param $optionText + * @return mixed + * @see Codeception\Module\WebDriver::seeOptionIsSelected() * @return \Codeception\Maybe */ - public function seeInCurrentUrl($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeInCurrentUrl', func_get_args())); + public function seeOptionIsSelected($selector, $optionText) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeOptionIsSelected', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1099,27 +1754,29 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that current uri does not contain a value + * Checks if option is not selected in select field. * * ``` php * dontSeeInCurrentUrl('/users/'); + * $I->dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); * ?> * ``` * - * @param $uri + * @param $selector + * @param $optionText + * @return mixed * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::dontSeeInCurrentUrl() + * @see Codeception\Module\WebDriver::dontSeeOptionIsSelected() * @return \Codeception\Maybe */ - public function cantSeeInCurrentUrl($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeInCurrentUrl', func_get_args())); + public function cantSeeOptionIsSelected($selector, $optionText) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeOptionIsSelected', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1131,20 +1788,22 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that current uri does not contain a value + * Checks if option is not selected in select field. * * ``` php * dontSeeInCurrentUrl('/users/'); + * $I->dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); * ?> * ``` * - * @param $uri - * @see Codeception\Util\Mink::dontSeeInCurrentUrl() + * @param $selector + * @param $optionText + * @return mixed + * @see Codeception\Module\WebDriver::dontSeeOptionIsSelected() * @return \Codeception\Maybe */ - public function dontSeeInCurrentUrl($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeInCurrentUrl', func_get_args())); + public function dontSeeOptionIsSelected($selector, $optionText) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeOptionIsSelected', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1152,29 +1811,28 @@ class WebGuy extends \Codeception\AbstractGuy 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. + * Checks that page title contains text. * * ``` php * seeCurrentUrlEquals('/'); + * $I->seeInTitle('Blog - Post #1'); * ?> * ``` * - * @param $uri + * @param $title + * @return mixed * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::seeCurrentUrlEquals() + * @see Codeception\Module\WebDriver::seeInTitle() * @return \Codeception\Maybe */ - public function canSeeCurrentUrlEquals($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlEquals', func_get_args())); + public function canSeeInTitle($title) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeInTitle', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1186,22 +1844,21 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that current url is equal to value. - * Unlike `seeInCurrentUrl` performs a strict check. + * Checks that page title contains text. * * ``` php * seeCurrentUrlEquals('/'); + * $I->seeInTitle('Blog - Post #1'); * ?> * ``` * - * @param $uri - * @see Codeception\Util\Mink::seeCurrentUrlEquals() + * @param $title + * @return mixed + * @see Codeception\Module\WebDriver::seeInTitle() * @return \Codeception\Maybe */ - public function seeCurrentUrlEquals($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeCurrentUrlEquals', func_get_args())); + public function seeInTitle($title) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeInTitle', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1209,29 +1866,22 @@ class WebGuy extends \Codeception\AbstractGuy 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('/'); - * ?> - * ``` + * Checks that page title does not contain text. * - * @param $uri + * @param $title + * @return mixed * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::dontSeeCurrentUrlEquals() + * @see Codeception\Module\WebDriver::dontSeeInTitle() * @return \Codeception\Maybe */ - public function cantSeeCurrentUrlEquals($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlEquals', func_get_args())); + public function cantSeeInTitle($title) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeInTitle', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1243,22 +1893,15 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that current url is not equal to value. - * Unlike `dontSeeInCurrentUrl` performs a strict check. - * - * ``` php - * dontSeeCurrentUrlEquals('/'); - * ?> - * ``` + * Checks that page title does not contain text. * - * @param $uri - * @see Codeception\Util\Mink::dontSeeCurrentUrlEquals() + * @param $title + * @return mixed + * @see Codeception\Module\WebDriver::dontSeeInTitle() * @return \Codeception\Maybe */ - public function dontSeeCurrentUrlEquals($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlEquals', func_get_args())); + public function dontSeeInTitle($title) { + $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeInTitle', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1266,54 +1909,39 @@ class WebGuy extends \Codeception\AbstractGuy 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+)~'); - * ?> - * ``` + * 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). * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::seeCurrentUrlMatches() + * @see Codeception\Module\WebDriver::acceptPopup() * @return \Codeception\Maybe */ - public function canSeeCurrentUrlMatches($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlMatches', func_get_args())); + public function acceptPopup() { + $this->scenario->addStep(new \Codeception\Step\Action('acceptPopup', 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\Util\Mink::seeCurrentUrlMatches() + * Dismisses active JavaScript popup created by `window.alert`|`window.confirm`|`window.prompt`. + * @see Codeception\Module\WebDriver::cancelPopup() * @return \Codeception\Maybe */ - public function seeCurrentUrlMatches($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeCurrentUrlMatches', func_get_args())); + public function cancelPopup() { + $this->scenario->addStep(new \Codeception\Step\Action('cancelPopup', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1321,28 +1949,21 @@ class WebGuy extends \Codeception\AbstractGuy 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+)~'); - * ?> - * ``` + * Checks that active JavaScript popup created by `window.alert`|`window.confirm`|`window.prompt` contain text. * - * @param $uri + * @param $text * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::dontSeeCurrentUrlMatches() + * @see Codeception\Module\WebDriver::seeInPopup() * @return \Codeception\Maybe */ - public function cantSeeCurrentUrlMatches($uri) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlMatches', func_get_args())); + public function canSeeInPopup($text) { + $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeInPopup', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1354,21 +1975,14 @@ class WebGuy extends \Codeception\AbstractGuy * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that current url does not match a RegEx value - * - * ``` php - * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` + * Checks that active JavaScript popup created by `window.alert`|`window.confirm`|`window.prompt` contain text. * - * @param $uri - * @see Codeception\Util\Mink::dontSeeCurrentUrlMatches() + * @param $text + * @see Codeception\Module\WebDriver::seeInPopup() * @return \Codeception\Maybe */ - public function dontSeeCurrentUrlMatches($uri) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlMatches', func_get_args())); + public function seeInPopup($text) { + $this->scenario->addStep(new \Codeception\Step\Assertion('seeInPopup', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1376,42 +1990,39 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that cookie is set. + * Enters text into native JavaScript prompt popup created by `window.prompt`. * - * @param $cookie - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::seeCookie() + * @param $keys + * @see Codeception\Module\WebDriver::typeInPopup() * @return \Codeception\Maybe */ - public function canSeeCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeCookie', func_get_args())); + public function typeInPopup($keys) { + $this->scenario->addStep(new \Codeception\Step\Action('typeInPopup', 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. - * - * @param $cookie - * @return mixed - * @see Codeception\Util\Mink::seeCookie() + * Reloads current page + * @see Codeception\Module\WebDriver::reloadPage() * @return \Codeception\Maybe */ - public function seeCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeCookie', func_get_args())); + 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); @@ -1419,42 +2030,37 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks that cookie doesn't exist - * - * @param $cookie - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::dontSeeCookie() + * Moves back in history + * @see Codeception\Module\WebDriver::moveBack() * @return \Codeception\Maybe */ - public function cantSeeCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeCookie', func_get_args())); + 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. * ---------------------------------------------- * - * Checks that cookie doesn't exist - * - * @param $cookie - * @return mixed - * @see Codeception\Util\Mink::dontSeeCookie() + * Moves forward in history + * @see Codeception\Module\WebDriver::moveForward() * @return \Codeception\Maybe */ - public function dontSeeCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeCookie', func_get_args())); + 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); @@ -1462,22 +2068,53 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Sets a cookie. + * 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. * - * @param $cookie - * @param $value - * @return mixed - * @see Codeception\Util\Mink::setCookie() + * 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))); + * + * ``` + * + * @param $selector + * @param $params + * @throws \Codeception\Exception\ElementNotFound + * @see Codeception\Module\WebDriver::submitForm() * @return \Codeception\Maybe */ - public function setCookie($cookie, $value) { - $this->scenario->addStep(new \Codeception\Step\Action('setCookie', 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); @@ -1485,21 +2122,31 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Unsets cookie + * Waits until element has changed according to callback function or for $time seconds to pass. * - * @param $cookie - * @return mixed - * @see Codeception\Util\Mink::resetCookie() + * ``` php + * waitForElementChange('#menu', function(\WebDriverElement $el) { + * return $el->isDisplayed(); + * }, 100); + * ?> + * ``` + * + * @param $element + * @param \Closure $callback + * @param int $timeout seconds + * @throws \Codeception\Exception\ElementNotFound + * @see Codeception\Module\WebDriver::waitForElementChange() * @return \Codeception\Maybe */ - public function resetCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\Action('resetCookie', func_get_args())); + public function waitForElementChange($element, $callback, $timeout = null) { + $this->scenario->addStep(new \Codeception\Step\Action('waitForElementChange', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1507,21 +2154,30 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Grabs a cookie value. + * Waits for element to appear on page for $timeout seconds to pass. + * If element not appears, timeout exception is thrown. * - * @param $cookie - * @return mixed - * @see Codeception\Util\Mink::grabCookie() + * ``` php + * waitForElement('#agree_button', 30); // secs + * $I->click('#agree_button'); + * ?> + * ``` + * + * @param $element + * @param int $timeout seconds + * @throws \Exception + * @see Codeception\Module\WebDriver::waitForElement() * @return \Codeception\Maybe */ - public function grabCookie($cookie) { - $this->scenario->addStep(new \Codeception\Step\Action('grabCookie', func_get_args())); + public function waitForElement($element, $timeout = null) { + $this->scenario->addStep(new \Codeception\Step\Action('waitForElement', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1529,30 +2185,30 @@ class WebGuy extends \Codeception\AbstractGuy 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. + * Waits for element to be visible on the page for $timeout seconds to pass. + * If element doesn't appear, timeout exception is thrown. * * ``` php * grabFromCurrentUrl('~$/user/(\d+)/~'); - * $uri = $I->grabFromCurrentUrl(); + * $I->waitForElementVisible('#agree_button', 30); // secs + * $I->click('#agree_button'); * ?> * ``` * - * @param null $uri - * @internal param $url - * @return mixed - * @see Codeception\Util\Mink::grabFromCurrentUrl() + * @param $element + * @param int $timeout seconds + * @throws \Exception + * @see Codeception\Module\WebDriver::waitForElementVisible() * @return \Codeception\Maybe */ - public function grabFromCurrentUrl($uri = null) { - $this->scenario->addStep(new \Codeception\Step\Action('grabFromCurrentUrl', func_get_args())); + public function waitForElementVisible($element, $timeout = null) { + $this->scenario->addStep(new \Codeception\Step\Action('waitForElementVisible', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1560,30 +2216,29 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Attaches file from Codeception data directory to upload field. - * - * Example: + * Waits for element to not be visible on the page for $timeout seconds to pass. + * If element stays visible, timeout exception is thrown. * * ``` php * attachFile('input[@type="file"]', 'prices.xls'); + * $I->waitForElementNotVisible('#agree_button', 30); // secs * ?> * ``` * - * @param $field - * @param $filename - * @see Codeception\Util\Mink::attachFile() + * @param $element + * @param int $timeout seconds + * @throws \Exception + * @see Codeception\Module\WebDriver::waitForElementNotVisible() * @return \Codeception\Maybe */ - public function attachFile($field, $filename) { - $this->scenario->addStep(new \Codeception\Step\Action('attachFile', func_get_args())); + public function waitForElementNotVisible($element, $timeout = null) { + $this->scenario->addStep(new \Codeception\Step\Action('waitForElementNotVisible', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1591,56 +2246,54 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if option is selected in select field. + * 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. * * ``` php * seeOptionIsSelected('#form input[name=payment]', 'Visa'); + * $I->waitForText('foo', 30); // secs + * $I->waitForText('foo', 30, '.title'); // secs * ?> * ``` * - * @param $selector - * @param $optionText - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::seeOptionIsSelected() + * @param string $text + * @param int $timeout seconds + * @param null $selector + * @throws \Exception + * @internal param string $element + * @see Codeception\Module\WebDriver::waitForText() * @return \Codeception\Maybe */ - public function canSeeOptionIsSelected($select, $text) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('seeOptionIsSelected', func_get_args())); + public function waitForText($text, $timeout = null, $selector = null) { + $this->scenario->addStep(new \Codeception\Step\Action('waitForText', 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 option is selected in select field. - * - * ``` php - * seeOptionIsSelected('#form input[name=payment]', 'Visa'); - * ?> - * ``` + * Explicit wait. * - * @param $selector - * @param $optionText - * @return mixed - * @see Codeception\Util\Mink::seeOptionIsSelected() + * @param $timeout secs + * @see Codeception\Module\WebDriver::wait() * @return \Codeception\Maybe */ - public function seeOptionIsSelected($select, $text) { - $this->scenario->addStep(new \Codeception\Step\Assertion('seeOptionIsSelected', func_get_args())); + public function wait($timeout) { + $this->scenario->addStep(new \Codeception\Step\Action('wait', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1648,56 +2301,81 @@ class WebGuy extends \Codeception\AbstractGuy return new Maybe(); } - + /** * This method is generated. * Documentation taken from corresponding module. * ---------------------------------------------- * - * Checks if option is not selected in select field. + * Low-level API method. + * If Codeception commands are not enough, use Selenium WebDriver methods directly * * ``` php - * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); - * ?> + * $I->executeInSelenium(function(\WebDriver $webdriver) { + * $webdriver->get('http://google.com'); + * }); * ``` * - * @param $selector - * @param $optionText - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see Codeception\Util\Mink::dontSeeOptionIsSelected() + * 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() * @return \Codeception\Maybe */ - public function cantSeeOptionIsSelected($select, $text) { - $this->scenario->addStep(new \Codeception\Step\ConditionalAssertion('dontSeeOptionIsSelected', func_get_args())); + public function executeInSelenium($function) { + $this->scenario->addStep(new \Codeception\Step\Action('executeInSelenium', 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 option is not selected in select field. + * 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 + * + * ``` * * ``` php * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); + * $I->click("Open window"); + * # switch to another window + * $I->switchToWindow("another_window"); + * # switch to parent window + * $I->switchToWindow(); * ?> * ``` * - * @param $selector - * @param $optionText - * @return mixed - * @see Codeception\Util\Mink::dontSeeOptionIsSelected() + * 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); + * }); + * ?> + * ``` + * + * @param string|null $name + * @see Codeception\Module\WebDriver::switchToWindow() * @return \Codeception\Maybe */ - public function dontSeeOptionIsSelected($select, $text) { - $this->scenario->addStep(new \Codeception\Step\Assertion('dontSeeOptionIsSelected', func_get_args())); + public function switchToWindow($name = null) { + $this->scenario->addStep(new \Codeception\Step\Action('switchToWindow', func_get_args())); if ($this->scenario->running()) { $result = $this->scenario->runStep(); return new Maybe($result); @@ -1705,68 +2383,65 @@ class WebGuy extends \Codeception\AbstractGuy 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 + * Switch to another frame * * Example: + * ``` html + *