getCompulsoryKey()]) { if ($field[$this->getTypeKey()] == $this->getTypeSelect()) { $this->setDropdownValueByIndexWithJquery($id, 0); } else { $this->sendKeysAndTriggerValidation($id, ''); } $this->assertFieldHasCompulsoryError($id, $langCode); } switch ($field[$this->getTypeKey()]) { case $this->getTypeDate(): // Assert invalid date error is shown after entering invalid date. if ($field[$this->getCompulsoryKey()]) { $this->sendKeysAndTriggerValidation($id, 'test'); $this->assertFieldHasCompulsoryError($id, $langCode); } $this->sendKeysAndTriggerValidation($id, '123'); $this->assertInvalidDateError($id, $langCode); $this->sendKeysAndTriggerValidation($id, date($this->PUBDateFormat . ' ' . $this->PUBTime)); $this->assertInvalidDateError($id, $langCode); break; case $this->getTypeNumber(): $this->sendKeysAndTriggerValidation($id, 'asd'); $this->assertFieldHasNotValidNumberError($id, $langCode); break; case $this->getTypeEmail(): $this->sendKeysAndTriggerValidation($id, 'test'); $this->assertInvalidEmailError($id, $langCode); break; case $this->getTypePhone(): $this->sendKeysAndTriggerValidation($id, 'test'); $this->assertInvalidPhoneError($id, $langCode); break; case $this->getTypeText(): default: break; } } public function fillingInDefaultRequiredFieldValue(string $fieldType, string $id): void { if ($fieldType === $this->getTypeDate()) { $this->sendKeysAndTriggerValidation($id, date($this->PUBDateFormat)); } elseif ($fieldType === $this->getTypeSelect()) { $this->setDropdownValueByIndexWithJquery($id, 1); } elseif ($fieldType === $this->getTypeNumber()) { $this->sendKeysAndTriggerValidation($id, 0); } elseif ($fieldType === $this->getTypePhone()) { $this->sendKeysAndTriggerValidation($id, '+371123456789'); } elseif ($fieldType === $this->getTypeEmail()) { $this->sendKeysAndTriggerValidation($id, 'test@zutenis.lv'); } else { $this->sendKeysAndTriggerValidation($id, 'default value'); } } public function assertCompulsoryFields(array $compulsoryFields, string $langCode): void { // Assert the right amount of compulsory error is displayed in the sticky status bar $allCompErrors = $this->elementsByCssSelector("#custom-sticky-status-cnt > div > div > div.cdrop > div"); $this->assertCount(count($compulsoryFields), $allCompErrors); $compErrors = []; foreach ($allCompErrors as $remoteWebElement) { $compErrors[$remoteWebElement->getAttribute('data-id')] = $remoteWebElement->findElement(WebDriverBy::cssSelector('span.emsg'))->getText(); } foreach ($compulsoryFields as $id) { $this->assertFieldHasCompulsoryError($id, $langCode); $this->assertSame($compErrors[$id], $this->getFieldErrorMessage($id)); } } public function assertFieldsGeneralError(array $fields): void { // Assert the right amount of compulsory error is displayed in the sticky status bar $allCompErrors = $this->elementsByCssSelector("#custom-sticky-status-cnt > div > div > div.cdrop > div"); $compErrors = []; foreach ($allCompErrors as $remoteWebElement) { $compErrors[$remoteWebElement->getAttribute('data-id')] = $remoteWebElement->findElement(WebDriverBy::cssSelector('span.emsg'))->getText(); } foreach ($fields as $field => $expected) { $err = "On field: $field, expected: $expected, got: {$compErrors[$field]}"; $this->assertSame($compErrors[$field], $expected, $err); } } public function assertFieldHasNotValidNumberError(string $id, string $lang = ''): void { switch ($lang) { case siteLanguages::LANG_LV: $this->assertFieldHasError($id, 'Norādīts nekorekts cipars!'); break; case siteLanguages::LANG_RU: $this->assertFieldHasError($id, 'Указан неправильно цифра!'); break; case siteLanguages::LANG_EN: default: $this->assertFieldHasError($id, 'Not a valid number specified!'); break; } } public function assertInvalidDateError(string $id, string $lang = ''): void { switch ($lang) { case siteLanguages::LANG_LV: $this->assertFieldHasError($id, 'Ievadīts nekorekts datums!'); break; case siteLanguages::LANG_RU: case siteLanguages::LANG_EN: default: $this->assertFieldHasError($id, 'Invalid date specified!'); break; } } public function assertInvalidEmailError(string $id, string $lang = ''): void { switch ($lang) { case siteLanguages::LANG_LV: $this->assertFieldHasError($id, 'Ievadīta nekorekta e-pasta adrese!'); break; case siteLanguages::LANG_RU: $this->assertFieldhasError($id, 'Не указан правильный адрес электронной почты!'); break; case siteLanguages::LANG_EN: default: $this->assertFieldHasError($id, 'Not a valid email address specified!'); break; } } public function assertInvalidPhoneError(string $id, string $lang = ''): void { switch ($lang) { case siteLanguages::LANG_LV: $this->assertFieldHasError($id, 'Norādīts nepareizs tālrunis!'); break; case siteLanguages::LANG_RU: $this->assertFieldhasError($id, 'Указан неверный телефон!'); break; case siteLanguages::LANG_EN: default: $this->assertFieldHasError($id, 'Invalid telephone specified!'); break; } } public function assertPartnerDocNrInUse(string $id, string $lang = ''): void { switch ($lang) { case siteLanguages::LANG_LV: $this->assertFieldHasError($id, 'Partnera dokuments ar šo numuru jau ievadīts!'); break; case siteLanguages::LANG_RU: $this->assertFieldhasError($id, 'Партнерский документ с этим номером уже введен!'); break; case siteLanguages::LANG_EN: default: $this->assertFieldHasError($id, 'Partner has already document with this number entered!'); break; } } public function assertFieldHasCompulsoryError(string $id, $lang = ''): void { switch ($lang) { case siteLanguages::LANG_LV: $this->assertFieldHasError($id, 'Lūdzu aizpildiet lauku!'); break; case siteLanguages::LANG_RU: $this->assertFieldHasError($id, 'Пожалуйста, заполните поле!'); break; case siteLanguages::LANG_EN: default: $this->assertFieldHasError($id, 'Please fill in the field!'); break; } } public function assertErrorWhileSavingForm($lang = null): void { switch ($lang) { case siteLanguages::LANG_LV: $this->assertFormErrorMessage( 'Saglabājot Dokumentu, Tika Atrastas Dažas Kļūdas', 'Lai turpinātu, izlabojiet norādītās kļūdas. Uz katras kļūdas variet noklikšķināt, tādējādi ātri nokļūstot uz izvēlēto kļūdaino lauku formā!' ); break; case siteLanguages::LANG_RU: $this->assertFormErrorMessage( 'При Сохранении Документа Обнаружены Ошибки', 'Пожалуйста, исправьте эти ошибки, прежде чем продолжить. Вы можете щелкнуть каждое поле, чтобы быстро перейти к полю ошибки!' ); break; case siteLanguages::LANG_EN: default: $this->assertFormErrorMessage( 'Some Errors Were Found While Saving Document', 'Please correct these mistakes before continuing, you may click on each if the field to quickly get to error field!' ); break; } } public function getFieldValidateContainerXpath(string $selector, string $selectorType = self::ID): string { $element = $this->getRemoteWebElement($selector, $selectorType); $id = $element->getAttribute('id'); return "//div[contains(@class, 'validate') and .//@id='$id']"; } public function getFieldValidateErrorContainerXpath(string $id): string { return "//div[contains(@class, 'validate') and contains(@class, 'v-error') and .//@id='$id']"; } public function getFieldErrorMessage(string $id): string { return $this->byXPath($this->getFieldValidateErrorContainerXpath($id) . "//div[contains(@class, 'errMsg')]")->getText(); } public function moveOnFieldValidateContainer(string $id): void { $containerXPath = $this->getFieldValidateErrorContainerXpath($id); $this->elementWait($containerXPath, self::XPATH); $this->webDriver->action()->moveToElement($this->byXPath($containerXPath))->perform(); } public function assertFieldHasError(string $id, string $expectedMessage): void { $errorXPath = $this->getFieldValidateErrorContainerXpath($id) . "//div[contains(@class, 'errMsg')]"; $actualMessage = ''; try { $this->moveOnFieldValidateContainer($id); // Wait for the error message element to be present and visible $this->elementWait($errorXPath, self::XPATH, true, true, true, false); $actualMessage = $this->byXPath($errorXPath)->getText(); $this->assertSame($expectedMessage, $actualMessage); // TODO: Varbūt vajag gaidīt kamēr parādas teksts. } catch (\Exception $exception) { $msg = "Failed on error XPath: $errorXPath" . PHP_EOL . "With the message: {$exception->getMessage()}"; $msg .= PHP_EOL . "Expected message '$expectedMessage', got '$actualMessage'"; $this->fail($msg); } } public function assertFieldIsOk(string $id): void { // Use XPath to find the .validate container with v-ok class for the specific field $containerXPath = "//div[contains(@class, 'validate') and contains(@class, 'v-ok') and .//@id='$id']"; $this->assertTrue($this->elementExists($containerXPath, self::XPATH, true), "Xpath '$containerXPath'"); } public function assertFormErrorMessage(string $messageTitle, string $messageDescription): void { $validatorCustomerMsg = '#custom-sticky-status-cnt > div > div.validator-custom-msg'; $selector = $validatorCustomerMsg . '.err-show > h3'; $descSelector = $validatorCustomerMsg . '.err-show > div.desc > p'; $this->scrollElementIntoView($selector, self::CSS_SELECTOR); $this->assertElementTextContainsByCss($selector, $messageTitle); $this->assertElementTextContainsByCss($descSelector, $messageDescription); } public function assertFormSuccessfullySavedMessage(string $lang = ''): void { $selector = '#custom-sticky-status-cnt > div > div > h3'; $this->scrollElementIntoView($selector, self::CSS_SELECTOR); switch ($lang) { case siteLanguages::LANG_LV: $this->assertElementTextContainsByCss($selector, "Dati Veiksmīgi Saglabāti!"); break; case siteLanguages::LANG_RU: $this->assertElementTextContainsByCss($selector, "Данные Были Успешно Сохранены!"); break; case siteLanguages::LANG_EN: default: $this->assertElementTextContainsByCss($selector, "Data Has Been Successfully Saved!"); break; } } }