[ 'menuItemXPath' => "//div[@id='navbar']//span[contains(., 'Grāmatvedības sistēma')]//ancestor::a", 'url' => 'ienakt-gramatvedibas-sistema', 'header' => 'Ienākt grāmatvedības sistēmā', 'exists' => ['#user_login', '#user_password', 'div.rchk.agree_to', 'button.btn.btn-block'], 'text-exists' => [ 'Ienākt grāmatvedības sistēmā', 'Es esmu izlasījis un', 'piekrītu noteikumiem.', 'Ienākt', 'Aizmirsi paroli?', 'Reģistrācija', 'Atgriezties uz zutenis.lv mājaslapu' ], 'inv-user' => 'Lietotāja vārds vai parole ievadīta nepareizi!', 'blocked-user' => 'Lietotāja vārds vai parole ievadīta nepareizi!', 'login-ok' => 'Lietotāja vārds vai parole ievadīta nepareizi!', 'fill-field' => 'Lūdzu aizpildiet lauku!', 'linksToTexts' => [ '/paroles-atgusana' => [ 'wait_id' => 'passRecovery_cnt', 'text' => 'Paroles atgūšana', 'text_selector' => 'div.pw_recovery > p.font-20.semi-font' ], '/registracija' => [ 'wait_tag' => 'h1', 'text' => 'Reģistrācija', 'text_selector' => 'h1.to-animate' ], '/' => [ 'wait_tag' => 'h1', 'text' => 'Laipni lūgti grāmatvedības sistēmā ZUTENIS', 'text_selector' => 'h1.to-animate' ], ], 'iframe-content' => 'Lietošanas noteikumi', 'login-2nd-step' => 'Divu faktoru autentifikācija' ] ]; protected function setUp(): void { parent::setUp(); $this->reloadDbTables(['mod_users']); } public function testLogin(): void { $loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed); foreach (self::url as $lang => $pageData) { $this->url($pageData['url']); // Login user till Two-factor authentication self::logInUserByCredentials($this, $pageData, $loginData); // $this->elementWait('user_login'); // $this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText()); // // // Input login data // $this->byId("user_login")->sendKeys($loginData['user']); // $this->byId("user_password")->sendKeys($loginData['password']); // // $this->byCssSelector("form#frm_input div#agree_to_terms")->click(); // $this->byCssSelector("form#frm_input button.btn.btn-block")->click(); // // $this->elementWait('frm_2fa_input'); // $this->assertEquals($pageData['login-2nd-step'], $this->byCssSelector('div#form > .relative > p.font-20')->getText()); // Check for logout - log out $this->byCssSelector("form#frm_2fa_input > a.link")->click(); $this->elementWait('user_login'); $this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText()); } } public static function logInUserByCredentials( BasePhpUnitSeleniumCase $activeTestCase, array $langData = null, array $loginData = null): void { $activeTestCase->elementWait('user_login'); $activeTestCase->assertEquals($langData['header'], $activeTestCase->byCssSelector('div#form > .relative > p.font-20')->getText()); // Input login data $activeTestCase->byId("user_login")->sendKeys($loginData['user']); $activeTestCase->byId("user_password")->sendKeys($loginData['password']); $activeTestCase->byCssSelector("form#frm_input div#agree_to_terms")->click(); $activeTestCase->byCssSelector("form#frm_input button.btn.btn-block")->click(); $activeTestCase->elementWait('frm_2fa_input'); $activeTestCase->assertEquals($langData['login-2nd-step'], $activeTestCase->byCssSelector('div#form > .relative > p.font-20')->getText()); } public function testLoginForm(): void { foreach (self::url as $lang => $pageData) { $this->url($pageData['url']); $this->elementWait('user_login'); // Test error containing fields $this->webDriver->executeScript('$("#user_login").focus().blur();'); $this->webDriver->action()->moveToElement($this->byId('user_login'))->perform(); $this->elementWait('#user_login + div.errMsg', self::CSS_SELECTOR); $this->assertEquals($pageData['fill-field'], $this->byCssSelector('#user_login + div.errMsg')->getText()); $this->webDriver->executeScript('$("#user_password").focus().blur();'); $this->webDriver->action()->moveToElement($this->byId('user_password'))->perform(); $this->elementWait('#user_password + div.errMsg', self::CSS_SELECTOR); $this->assertEquals($pageData['fill-field'], $this->byCssSelector('#user_password + div.errMsg')->getText()); // Input invalid login data $this->byId("user_login")->sendKeys('test'); $this->byId("user_password")->sendKeys('test'); $this->byCssSelector("form#frm_input div#agree_to_terms")->click(); $this->byCssSelector("form#frm_input button.btn.btn-block")->click(); $this->elementWait('status_error', self::CLASS_NAME); $this->assertEquals($pageData['inv-user'], $this->byCssSelector('div.status_error')->getText()); // Check agree to terms iframe - wait for login page to reload $this->byCssSelector("a#show-terms")->click(); $this->elementWait('.fancybox-iframe', self::CSS_SELECTOR); $this->webDriver->switchTo()->frame($this->byCssSelector('.fancybox-iframe')); $this->elementWait('#fh5co-home .row div.col-md-8 h1', self::CSS_SELECTOR); sleep(2); // Sleep while animation is complete $this->assertEquals($pageData['iframe-content'], $this->byCssSelector('h1')->getText()); $this->webDriver->switchTo()->defaultContent(); } } public function testLoginPageRedirectLinks(): void { foreach (self::url as $lang => $pageData) { $this->url($pageData['url']); $this->elementWait('user_login'); // Test pages clicks $pagesToVisit = []; $links = $this->webDriver->findElements(WebDriverBy::cssSelector('#frm_input > a.link')); foreach ($links as $link) { $pagesToVisit[] = $link->getAttribute('href'); } foreach ($pagesToVisit as $href) { if (isset($pageData['linksToTexts'][$href])) { $this->url($this->normalizeUrl($href)); sleep(2); // Element Wait fails for some unknown reason if (isset($pageData['linksToTexts'][$href]['wait_id'])) $this->elementWait($pageData['linksToTexts'][$href]['wait_id']); elseif (isset($pageData['linksToTexts'][$href]['wait_tag'])) $this->elementWait($pageData['linksToTexts'][$href]['wait_tag'], self::TAG_NAME); $this->assertEquals($pageData['linksToTexts'][$href]['text'], $this->byCssSelector($pageData['linksToTexts'][$href]['text_selector'])->getText()); } } } } public function testLoginPageLoaded(): void { foreach (self::url as $lang => $pageData) { $this->url('index'); $this->awaitAndAcceptCookies(); $this->elementWait($pageData['menuItemXPath'], self::XPATH); $this->byXPath($pageData['menuItemXPath'])->click(); sleep(2); $this->url($pageData['url']); $this->elementWait('user_login'); foreach ($pageData['exists'] as $selectorToFind) { $this->assertTrue($this->elementExists($selectorToFind, self::CSS_SELECTOR)); } $this->assertExpected($pageData['text-exists'], $this->byTagName('body')->getText()); } } }