public function _before(AcceptanceTester $I) { $I->wantTo('Install and Configure WC'); $I->loginAsAdmin(); //Only if Run this test Seperately $I->amGoingTo('Activate Woocommerce Plugin'); $I->amOnPluginsPage(); //In order that the activatePlugin() works, the webdriver needs to be in Plugins page $I->activatePlugin('woocommerce'); $I->amGoingTo('Run Woocommerce Setup'); $I->waitForElement(".button-primary", 20); $I->click("Let's Go!"); $I->waitForElement(".button-primary", 15); $I->click("Continue"); $I->wait(1); $I->click("Continue"); $I->wait(1); $I->click("Continue"); $I->wait(1); $I->checkOption('#woocommerce_enable_cod'); $I->click("Continue"); $I->waitForElement(".button-secondary", 15); $I->click("No thanks"); $I->wait(1); $I->click("Return to the WordPress Dashboard"); }
public function _before(AcceptanceTester $I) { $I->wantTo('Install WPML'); $I->loginAsAdmin(); $I->amGoingTo('Activate WPML Plugins'); $I->amOnPluginsPage(); //In order that the activatePlugin() works, the webdriver needs to be in Plugins page $I->activatePlugin('wpml-multilingual-cms'); $I->amGoingTo('Configure WPML'); $I->click('No thanks, I will configure myself'); $I->click('Next'); //Let's English as Default language $I->checkOption('Greek'); $I->wait(1); $I->click('Next'); $I->wait(5); $I->checkOption('form input[name=icl_lang_sel_footer]'); $I->waitForElement(".button-primary", 15); $I->wait(1); $I->click('Next'); $I->wait(3); $I->waitForElement(".button-primary", 15); $I->click('Remind me later'); $I->wait(5); $I->click('Finish'); }
private function logIn(\AcceptanceTester $I) { $I->amOnPage("/"); $I->waitForElement('//*[@id="doc"]/div[1]/div/div[1]/div[2]/button', 100); $I->click('//*[@id="doc"]/div[1]/div/div[1]/div[2]/button'); $I->fillField('//*[@id="signin-email"]', '*****@*****.**'); $I->fillField('//*[@id="signin-password"]', 'lovelove79'); $I->click('//*[@id="login-dialog-dialog"]/div[2]/div[2]/div[2]/form/input[1]'); $I->waitForElement('.bird-topbar-etched', 100); }
private function logIn(\AcceptanceTester $I) { $I->amOnPage("/"); $I->waitForElement('//*[@id="welcome"]/div[1]/div[1]/a[2]', 100); $I->click('//*[@id="welcome"]/div[1]/div[1]/a[2]'); $I->waitForElement('//*[@id="signin-login-field"]', 100); $I->fillField('//*[@id="signin-login-field"]', '*****@*****.**'); $I->fillField('//*[@id="signin-password-field"]', '1!2@3#4$5%'); $I->click('//*[@id="new_user"]/div[2]/input'); $I->waitForElement('//*[@id="navbar-user-dynamic"]/ul/li[2]/a[1]/img', 100); }
private function submitTheForm(AcceptanceTester $I, $attributes) { $I->waitForElement('form', 2); $I->fillField('form #title', $attributes['title']); $I->fillField('form #content', $attributes['content']); $I->click('form .btn-primary'); }
public function clickDropdown($title, $text) { if (is_array($text)) { $text = $text['link']; } if (is_array($title)) { $title = $title['link']; } $I = new \AcceptanceTester($this->scenario); $I->waitForElement(Page::$pageLoaded, 60); $I->click("//div[contains(@class,'dropdown__toggle')][contains(text(), '{$title}')]"); $I->waitForElement("//div[contains(@class, 'dropdown_opened')]", 30); $I->waitForElementVisible("//div[contains(@class,'navigation_vertical')]/a[contains(text(),'{$text}')]", 30); $I->click("//div[contains(@class,'navigation_vertical')]/a[contains(text(),'{$text}')]"); $I->waitForElement(Page::$pageLoaded, 60); }
function loginWithValidEMailPassword(\AcceptanceTester $I, \Page\Login $loginPage) { $I->wantTo("Check login with Valid Email and Password"); $loginPage->loginWithEmailAndPassword('*****@*****.**', '123asdF'); $I->waitForElement('div[class="infos"]'); $I->amOnPage('#/activities'); $I->see('Hi, Markus'); }
public function installNeno(AcceptanceTester $I) { $I->maximizeWindow(); $I->am('Administrator'); $I->installJoomla(); $I->doAdministratorLogin(); $I->setErrorReportingToDevelopment(); $I->amOnPage("/administrator/"); $I->click("Extensions"); $I->click("Extension Manager"); $I->click("Upload Package File"); $path = $I->getConfiguration('repo_folder'); // Installing library $I->installExtensionFromDirectory($path . 'lib_neno'); // Installing Plugin $I->installExtensionFromDirectory($path . 'plg_system_neno'); // Installing Component $I->installExtensionFromDirectory($path . 'com_neno'); // Enabling plugin $I->enablePlugin('Neno plugin'); // Going to Neno $I->click("Components"); $I->wait(1); $I->click("Neno Translate"); $I->wait(1); // Get started Screen $I->click('Get Started'); $I->waitForJS('return jQuery.active == 0', 5); $I->wait(1); // First step - Source language $I->see('Next'); $I->click(['xpath' => "//button[@type=\"button\"]"]); $I->wait(1); // Second step - Translation methods $I->click('Next'); $I->waitForJS('return jQuery.active == 0', 5); // Third step- Install language(s) $I->wait(1); $I->click("//*[@id=\"add-languages-button\"]"); $I->waitForJS("return jQuery.active == 0", 5); $I->waitForElementVisible(['class' => 'ar-AA'], 5); $I->wait(1); $I->click(['class' => 'ar-AA']); $I->see('Close', ['class' => 'close-button']); $I->click(['class' => 'close-button'], ['xpath' => "//*[@id=\"languages-modal\"]"]); $I->click(['xpath' => "(//button[@type=\"button\"])[4]"]); // Fourth step- Installing Neno $I->wait(1); $I->click("#backup-created-checkbox"); $I->click("#proceed-button"); // Fifth step- Installing Neno has been accomplish successfully //$I->waitForJS('return jQuery.installation == 1', 1000); $I->waitForElement(".icon-thumbs-up", 300); $I->doAdministratorLogout(); }
private function CanopyScrapeCest(\AcceptanceTester $I) { foreach ($this->categories as $category) { $I->amOnPage("{$category}/popular"); $I->waitForElement('.analytics--track-to-amazon', 100); try { $I->click('.LoadMoreButton'); } catch (\Exception $e) { } /* $I->wait(5); $I->executeJS("window.scrollTo(0,0)"); $items = $I->grabMultiple('.analytics--track-to-amazon', 'href'); foreach($items as $item){ $temp = explode('=',$item); $this->db->real_query("INSERT INTO `canopy_item_list` (`id`, `item_slug`, `from_where`, `sent_at`, `created_at`) VALUES (NULL, '{$temp[0]}=', '{$category}', NULL, CURRENT_TIMESTAMP);"); } $I->executeJS("$('.ProductCard').remove()"); $I->executeJS("window.scrollTo(0,document.body.scrollHeight)"); $I->waitForElement('.product-card', 100); */ $items = true; while ($items) { try { $rand_sec = rand(3, 6); $I->wait($rand_sec); // remove for faster scrape $I->executeJS("window.scrollTo(0,0)"); $items = $I->grabMultiple('.analytics--track-to-amazon', 'href'); foreach ($items as $item) { $temp = explode('=', $item); $this->db->real_query("INSERT INTO `canopy_item_list` (`id`, `item_slug`, `from_where`, `sent_at`, `created_at`) VALUES (NULL, '{$temp[0]}=', '{$category}', NULL, CURRENT_TIMESTAMP);"); } $I->executeJS("\$('.ProductCard').remove()"); $I->executeJS("window.scrollTo(0,document.body.scrollHeight)"); $I->waitForElement('.product-card', 100); } catch (\Exception $e) { break; } } } }
public function i_can_create_a_new_user(\AcceptanceTester $I) { $I->clickNode('#creatorcreator-933e76acb06dec2ba6c31ba9c058a4e9-node'); $I->click('button[data-creator-attribute-name="Name"]'); $I->waitForElement('#dvs-sidebar-field-form', self::WAIT_TIME); $I->fillField('text', 'tester'); $I->click('a[data-breadcrumb-id="0"]'); $I->wait(1); $I->click('button[data-creator-attribute-name="Email"]'); $I->waitForElement('#dvs-sidebar-field-form', self::WAIT_TIME); $I->fillField('text', '*****@*****.**'); $I->click('a[data-breadcrumb-id="0"]'); $I->wait(1); $I->click('button[data-creator-attribute-name="Password"]'); $I->waitForElement('#dvs-sidebar-field-form', self::WAIT_TIME); $I->fillField('text', 'password'); $I->click('button.dvs-sidebar-save-group'); $I->wait(self::WAIT_TIME); $I->seeInDatabase('users', array('email' => '*****@*****.**')); }
private function GetEtsyShops(\AcceptanceTester $I) { for ($pg = 1060; $pg <= 1250; $pg++) { $I->amOnPage("/search/shops?page=" . $pg); $I->waitForElement('.shopname', 100); $shops = $I->grabMultiple('.shopname'); foreach ($shops as $shop) { $this->db->real_query("INSERT INTO `etsy_store_list` (`id`, `store_slug`, `from_where`, `sent_at`, `created_at`) VALUES (NULL, '{$shop}', '{$pg}', NULL, CURRENT_TIMESTAMP);"); } } }
public function i_can_save_this_model(\AcceptanceTester $I) { $value = $I->generateRandomString(); $I->clickNode('#model0-node'); $I->click('.dvs-sidebar-elements button'); $I->waitForElement('#dvs-sidebar-field-form', 5); $I->fillField('text', $value); $I->click('button.dvs-sidebar-save-group'); $I->wait(10); $I->seeInDatabase('dvs_test_models', array('id' => 1, 'name' => $value)); }
private function AmazonScrapeCest(\AcceptanceTester $I) { $result = $this->db->query("SELECT * FROM `canopy_item_list`"); //$result = $this->db->query("SELECT * FROM `canopy_item_list` GROUP BY `from_where`"); //$urls = array('http://www.amazon.com/dp/B00HDGJY8S/?tag=','http://www.amazon.com/dp/B00R4O97ZE/?tag=','http://www.amazon.com/dp/B004LRPVM0/?tag=','http://www.amazon.com/dp/B00MKAJP0E/?tag=','http://www.amazon.com/dp/B00KCG10T2/?tag=','http://www.amazon.com/dp/B00JD2LKD2/?tag=','http://www.amazon.com/dp/1477800670/?tag=','http://www.amazon.com/dp/B001797M6S/?tag=','http://www.amazon.com/dp/0316378216/?tag=','http://www.amazon.com/dp/1616892323/?tag=','http://www.amazon.com/dp/B00LW3RCW8?tag='); while ($row = $result->fetch_assoc()) { $temp = explode('/', $row['item_slug']); $id = $temp[4]; $item_info['title'] = ''; $item_info['price'] = ''; $item_info['image_data'] = ''; $I->amOnPage("dp/{$id}"); try { $I->waitForElement('#productTitle', 10); $item_info['title'] = $this->db->real_escape_string($I->grabTextFrom('#productTitle')); } catch (\Exception $e) { } try { $item_info['price'] = $I->grabTextFrom('#priceblock_ourprice'); } catch (\Exception $e) { try { $item_info['price'] = $I->grabTextFrom('.header-price'); } catch (\Exception $e) { try { $item_info['price'] = $I->grabTextFrom('#buybox .a-color-price'); } catch (\Exception $e) { try { $item_info['price'] = $I->grabTextFrom('#unqualifiedBuyBox .a-color-price'); } catch (\Exception $e) { } } } } try { $item_info['image_data'] = $I->grabAttributeFrom('#imgTagWrapperId img', 'data-a-dynamic-image'); } catch (\Exception $e) { try { $item_info['image_data'] = $I->grabAttributeFrom('#mainImageContainer img', 'data-a-dynamic-image'); } catch (\Exception $e) { try { $item_info['image_data'] = $I->grabAttributeFrom('#img-canvas img', 'data-a-dynamic-image'); } catch (\Exception $e) { } } } $sql = "UPDATE `canopy_item_list` SET `title`='{$item_info['title']}',`price`='{$item_info['price']}',`image_data`='{$item_info['image_data']}' WHERE `item_slug`='{$row['item_slug']}'"; //codecept_debug($sql); $this->db->real_query($sql); $rand_sec = rand(3, 6); $I->wait($rand_sec); // remove for faster scrape } }
<?php use schmunk42\giiant\tests\_pages\LoginPage; #new schmunk42\giiant\tests\_pages\LoginPage; $I = new AcceptanceTester($scenario); $I->wantTo('ensure that crud works with access rules'); $I->amOnPage('/crud/actor'); $I->dontSee('Actor', 'h2'); $I->makeScreenshot('crud-actor-login'); $I->see('Sign in', 'h3'); $I->amGoingTo('try to login with correct credentials'); // TODO: use LoginPage $username = '******'; $password = '******'; $I->fillField('input[name="login-form[login]"]', $username); $I->fillField('input[name="login-form[password]"]', $password); $I->click('Sign in'); $I->waitForElement('#link-logout', 5); #LoginPage::openBy($I); #$loginPage = LoginPage::openBy($I); #$loginPage->login('admin', 'admin'); $I->see('Actor', 'h2'); $I->makeScreenshot('crud-actor');
<?php /** * @package redCORE * @subpackage Cept * @copyright Copyright (C) 2008 - 2015 redCOMPONENT.com. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // Load the Step Object Page $I = new \AcceptanceTester($scenario); $I = new AcceptanceTester($scenario); $I->wantTo('Uninstall redCORE Extension'); $I->doAdministratorLogin(); $I->amOnPage('/administrator/index.php?option=com_installer&view=manage'); $I->waitForText('Extensions: Manage', 30, ['css' => 'H1']); $I->fillField('#filter_search', 'redCORE - component'); $I->click(['xpath' => "//button[@type='submit' and @data-original-title='Search']"]); $I->waitForElement(['id' => 'manageList']); $I->click(['xpath' => "//input[@id='cb0']"]); $I->click(['xpath' => "//div[@id='toolbar-delete']/button"]); $I->waitForText('Uninstalling the component was successful', 30, ['id' => 'system-message-container']); $I->see('Uninstalling the component was successful', ['id' => 'system-message-container']); $I->fillField(['id' => 'filter_search'], 'redCORE - component'); $I->click(['xpath' => "//button[@type='submit' and @data-original-title='Search']"]); $I->waitForText('There are no extensions installed matching your query.', 30, ['class' => 'alert-no-items']); $I->see('There are no extensions installed matching your query.', ['class' => 'alert-no-items']);
<?php $I = new AcceptanceTester($scenario); $I->wantTo('perform actions and see result'); $I->amOnPage('/'); $I->waitForElement('#randomUserProfiles'); $I->canSeeNumberOfElements('#randomUserProfiles > ul > li', 21);
<?php $I = new AcceptanceTester($scenario); $I->wantTo("make live changes to an existing article"); $I->loginAs("*****@*****.**", "secret"); // see I'm on the dashboard and click to edit the article $I->expectTo("see the article I want to edit in the article index"); $I->see("Foo Test", "#foo-test .edit-title"); // see I'm on the editing frame, wait for the iframe content to appear $I->expectTo("see the article I'm editing appear in the preview frame"); $I->see("Editing Frame"); $I->switchToIFrame("editing_iframe"); $I->waitForElement(".title"); $I->see("Foo Test", ".title"); $I->see("foo article abstract content", ".abstract"); // see that the content in the editing field matches the iframe content $I->expectTo("see the content in the editing field match the article preview"); $I->switchToIFrame(); $I->seeInField("input#title_input", "Foo Test"); // make a change to a default field (always visible) $I->amGoingto("change the title"); $I->switchToIframe(); $I->seeInField("#title_input", "Foo Test"); $I->fillField("#title_input", "New Title"); // see change in iframe $I->expectTo("see the change I made reflected in the preview frame"); $I->switchToIFrame("editing_iframe"); $I->see("New Title", ".title"); // make a change to a dynamic field (stored in Field db) $I->amGoingTo("change the xxx field"); $I->switchToIframe();
<?php use schmunk42\giiant\tests\_pages\LoginPage; #new schmunk42\giiant\tests\_pages\LoginPage; $I = new AcceptanceTester($scenario); $I->wantTo('ensure that crud works with access rules'); $I->amOnPage('/sakila/actor'); $I->dontSee('Actors', 'h1'); $I->makeScreenshot('crud-actor-login'); $I->see('Sign in', 'h3'); $I->amGoingTo('try to login with correct credentials'); // TODO: use LoginPage $username = '******'; $password = '******'; $I->fillField('input[name="login-form[login]"]', $username); $I->fillField('input[name="login-form[password]"]', $password); $I->click('Sign in'); $I->waitForElement('.user-footer .pull-right a', 5); #LoginPage::openBy($I); #$loginPage = LoginPage::openBy($I); #$loginPage->login('admin', 'admin'); $I->see('Actors', 'h1'); $I->makeScreenshot('crud-actor');
private function logIn(\AcceptanceTester $I) { $I->amOnPage('/auth/login'); $I->waitForElement('input[name="email"]', 10); $I->fillField('email', '*****@*****.**'); $I->fillField('password', 'qawsed'); $I->click('.btn-primary'); $I->waitForElement('.post', 10); }
<?php /** * This tests login mouse over button. */ $I = new AcceptanceTester($scenario); $I->wantTo('check login functions'); $I->amOnPage('/typo3'); $I->waitForElement('#t3-username', 10); $I->wantTo('mouse over css change login button'); $bs = $I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) { return $webdriver->findElement(WebDriverBy::cssSelector('#t3-login-submit'))->getCSSValue('box-shadow'); }); $I->moveMouseOver('#t3-login-submit'); $I->wait(1); $bsmo = $I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) { return $webdriver->findElement(WebDriverBy::cssSelector('#t3-login-submit'))->getCSSValue('box-shadow'); }); $this->assertFalse($bs == $bsmo);
<?php $I = new AcceptanceTester($scenario); $I->wantTo('check drupal in search'); $I->amOnPage('/'); $I->fillField('#form-element-21', 'Drupal'); $I->click('#solr-website-search button'); $I->waitForElement('h2'); $I->see('Migrating Drupal to TYPO3');
<?php $I = new AcceptanceTester($scenario); $I->wantTo('login to backend'); $I->amOnPage('/typo3'); $I->waitForElement('#t3-username'); $I->seeInCurrentUrl('/typo3/'); $I->wantToTest('Login failed'); $I->fillField('#t3-username', 'testify'); $I->fillField('#t3-password', 'jsdlabvj'); $I->click('Login'); $I->waitForElement('body'); $I->seeNumberOfElements('#t3-login-error', 1);
<?php $I = new AcceptanceTester($scenario); $I->wantTo('Edit User Profile'); $I->amOnPage('/signup'); $user_time = time(); $I->fillField('#username', 'johndoe' . $user_time); $I->fillField('#email', 'johndoe' . $user_time . '@gmail.com'); $I->fillField('#password', 'password'); $I->fillField('#password_confirmation', 'password'); $I->click('.form-signin button'); $I->reloadPage(); $I->click('.user-menu-desktop'); $I->wait(2); $I->executeJS('return $(".user-menu-desktop").parent().addClass("open")'); $I->waitForElement('.user-profile-link-desktop', 10); // secs $I->click('.user-profile-link-desktop'); $I->click('.edit-user-profile'); $I->fillField('#username', 'bobsburgers'); $I->wait(2); $I->fillField('#email', '*****@*****.**'); $I->wait(2); $I->attachFile('input[name="avatar"]', 'bobsburgersavatar.jpg'); $I->click('.submit-update-profile'); $I->wait(2); $I->see('successful');
* @package redCORE * @subpackage Cept * @copyright Copyright (C) 2008 - 2015 redCOMPONENT.com. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // Load the Step Object Page $I = new \AcceptanceTester($scenario); $I->wantToTest('Activate the default webservices available in redCORE'); $I->doAdministratorLogin(); $I->comment('I enable basic authentication'); $I->amOnPage('administrator/index.php?option=com_plugins'); $I->waitForText('Plugins', 30, ['css' => 'H1']); $I->fillField(['id' => 'filter_search'], 'redcore - system plugin'); $I->click(['xpath' => "//div[@id='filter-bar']/div[2]/button"]); // search button $I->click(['link' => 'redCORE - System plugin']); $I->waitForText('Plugins: redCORE - System plugin', 30, ['css' => 'h1']); $I->click(['link' => 'Webservice options']); $I->selectOptionInRadioField('Enable webservices', 'Yes'); $I->selectOptionInRadioField('Enable SOAP Server', 'Yes'); $I->selectOptionInChosen('Check user permission against', 'Joomla - Use already defined authorization checks in Joomla'); $I->click(['xpath' => "//div[@id='toolbar-apply']/button"]); $I->waitForText('Plugin successfully saved.', 30, ['id' => 'system-message-container']); $I->amOnPage('administrator/index.php?option=com_redcore&view=webservices'); $I->waitForText('Webservice Manager', 30, ['css' => 'H1']); $I->click(['class' => 'lc-not_installed_webservices']); $I->click(['class' => 'lc-install_all_webservices']); $I->waitForElement(['id' => 'oauthClientsList'], 30); $I->see('administrator.contact.1.0.0.xml', ['class' => 'lc-webservice-file']); $I->see('site.contact.1.0.0.xml', ['class' => 'lc-webservice-file']); $I->see('site.users.1.0.0.xml', ['class' => 'lc-webservice-file']);
private function logIn(\AcceptanceTester $I) { codecept_debug('logIn'); $I->amOnPage('/auth/login'); $I->fillField('email', '*****@*****.**'); $I->fillField('password', 'qawsed'); $I->click('.btn-primary'); $I->waitForElement('.navbar-brand', 10); }
<?php $I = new AcceptanceTester($scenario); $I->wantTo('check if logo links to startpage'); $I->amOnPage('/'); $I->waitForElement('h1'); $href = $I->grabAttributeFrom('#logo', 'href'); $this->assertEquals('https://typo3.org/', $href);
$I->fillField('order_zip01', '100'); $I->fillField('order_zip02', '0001'); $I->selectOption('select[name=order_pref]', '北海道'); $I->fillField('order_addr01', '札幌市'); $I->fillField('order_addr02', '123'); $I->fillField('order_tel01', '00'); $I->fillField('order_tel02', '0000'); $I->fillField('order_tel03', '0000'); $I->fillField('order_email', '*****@*****.**'); $I->fillField('order_email02', '*****@*****.**'); $I->click('input[name="order_sex"][value="1"]'); $I->click('上記のお届け先のみに送る'); $I->click('input[name="payment_id"][value="5"]'); $I->click('次へ'); $I->click('次へ'); $I->waitForElement('#WP_checkoutBox', 5); $I->executeJS('WebPay.testMode = true'); $I->see('クレジットカード決済'); $I->click('カードで支払う'); $I->fillField('#WP_cardNumber', '4242 4242 4242 4242'); $I->selectOption('#WP_expMonth', '12'); $I->selectOption('#WP_expYear', '19'); $I->fillField('#WP_name', 'TEST TEST'); $I->fillField('#WP_cvc', '123'); $I->pushMockChargeResponse(['captured' => true]); $I->click('#WP_sendButton'); $I->waitForText('Test shopの商品をご購入いただき、ありがとうございました', 5); $I->loadRequest(); $I->seeInData('amount', 2782); $I->seeInData('card'); $I->seeInData('currency', 'jpy');
<?php $I = new AcceptanceTester($scenario); $I->wantTo('Test main navigation'); $I->amOnPage('/'); $I->moveMouseOver('.nav > li:nth-of-type(3)'); $I->wait(1); $I->see('Overview'); $I->click('Overview'); $I->waitForElement('h4'); $I->see('The Enterprise');
private function logIn(\AcceptanceTester $I) { codecept_debug('logIn'); $I->amOnPage('#/auth'); $I->fillField('email', '*****@*****.**'); $I->fillField('password', 'lovelove'); $I->click('.button[type=submit]'); $I->waitForElement('.ion-home', 10); }
<?php $I = new AcceptanceTester($scenario); $I->wantTo('perform actions and see result'); $I->amOnPage('/'); $I->waitForElement('#login-flyout'); $I->moveMouseOver('#login-flyout'); $I->waitForElement('#user'); $I->see('Sign up!'); $I->click('Sign up!'); $I->waitForElement('#tx-ajaxlogin-password-check'); $I->cantSeeElement('.b-form-error-message'); $I->click('Sign up!'); $I->waitForElement('.b-form-error-message'); $I->seeNumberOfElements('.b-form-error-message', 4);