diff --git a/README.md b/README.md
index 0f67074..c240f3c 100644
--- a/README.md
+++ b/README.md
@@ -164,18 +164,18 @@ Called on `asserter.applicationSection`:
| `asserter.applicationSection.checkNumberOfApplications(5)` | Ensure the application list has exactly 5 applications |
## 🔍 Application detail view
-Called on `asserter.applicationDetailSection`:
+Called on `asserter.applicationDetailsSection`:
| Method | Description |
|---|---|
-| `asserter.applicationDetailSection.checkPaymentMethod("Bankovnà převod")` | Ensure the application is paid via bank transfer |
-| `asserter.applicationDetailSection.checkFirstName("Jan")` | Check that the student first name is _Jan_ |
-| `asserter.applicationDetailSection.checkLastName("Novak")` | Check that the student last name is _Novak_ |
-| `asserter.applicationDetailSection.checkDateOfBirth("01.01.2010")` | Check that the student date of birth is _01.01.2010_ |
-| `asserter.applicationDetailSection.checkNote("myPrivateNote")` | Check that the note is _myPrivateNote_ |
-- `asserter.applicationDetailSection.checkRemainingAmountToPay("100.00")` - check that remaining amount to pay is _100.00_ KÄŤ
-- `asserter.applicationDetailSection.checkTerm("05.02. - 09.02.2024")` - check that the term is _05.02. - 09.02.2024_
-- `asserter.applicationDetailSection.checkMessageContainsStudentLastName("Novak")` - ensure that _Zpráva pro pĹ™Ăjemce_ contains student last name _Novak_
+| `asserter.applicationDetailsSection.checkPaymentMethod("Bankovnà převod")` | Ensure the application is paid via bank transfer |
+| `asserter.applicationDetailsSection.checkFirstName("Jan")` | Check that the student first name is _Jan_ |
+| `asserter.applicationDetailsSection.checkLastName("Novak")` | Check that the student last name is _Novak_ |
+| `asserter.applicationDetailsSection.checkDateOfBirth("01.01.2010")` | Check that the student date of birth is _01.01.2010_ |
+| `asserter.applicationDetailsSection.checkNote("myPrivateNote")` | Check that the note is _myPrivateNote_ |
+- `asserter.applicationDetailsSection.checkRemainingAmountToPay("100.00")` - check that remaining amount to pay is _100.00_ KÄŤ
+- `asserter.applicationDetailsSection.checkTerm("05.02. - 09.02.2024")` - check that the term is _05.02. - 09.02.2024_
+- `asserter.applicationDetailsSection.checkMessageContainsStudentLastName("Novak")` - ensure that _Zpráva pro pĹ™Ăjemce_ contains student last name _Novak_
# đź”§ Utilities
diff --git a/pom.xml b/pom.xml
index 54583ec..2ac2203 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,13 +22,7 @@
org.junit.jupiter
- junit-jupiter-api
- 5.9.3
- test
-
-
- org.junit.jupiter
- junit-jupiter-params
+ junit-jupiter
5.9.3
test
diff --git a/src/main/java/cz/czechitas/automation/PublicMenuAction.java b/src/main/java/cz/czechitas/automation/PublicMenuAction.java
index 2000da8..5d20515 100644
--- a/src/main/java/cz/czechitas/automation/PublicMenuAction.java
+++ b/src/main/java/cz/czechitas/automation/PublicMenuAction.java
@@ -1,5 +1,7 @@
package cz.czechitas.automation;
+import org.openqa.selenium.NoSuchElementException;
+
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Objects;
@@ -54,8 +56,14 @@ void goToHomePage() {
}
void goToApplicationsSection() {
- var applicationsMenuItem = elementFinder.findByXPath("//*[@id='navbarSupportedContent']//a[contains(text(), 'Přihlášky')]");
- applicationsMenuItem.click();
+ try {
+ var publicApplicationsMenuItem = elementFinder.findByXPath("//*[@id='navbarSupportedContent']//a[contains(text(), 'Přihlášky')]");
+ publicApplicationsMenuItem.click();
+ }
+ catch (NoSuchElementException ignored) {
+ var internalApplicationsMenuItem = elementFinder.findByXPath("//*[@id='adminNavbar']//a[contains(text(), 'Přihlášky')]");
+ internalApplicationsMenuItem.click();
+ }
}
private void clickForTeacherMenuItem() {
diff --git a/src/main/java/cz/czechitas/automation/SeleniumActionFacade.java b/src/main/java/cz/czechitas/automation/SeleniumActionFacade.java
index f66758e..7b6b8a1 100644
--- a/src/main/java/cz/czechitas/automation/SeleniumActionFacade.java
+++ b/src/main/java/cz/czechitas/automation/SeleniumActionFacade.java
@@ -51,9 +51,9 @@ String generateRandomName(int nameLength) {
var leftLimit = 97;
var rightLimit = 122;
- return random.ints(leftLimit, rightLimit + 1)
+ return Objects.requireNonNull(random.ints(leftLimit, rightLimit + 1)
.limit(nameLength)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
- .toString();
+ .toString());
}
}
diff --git a/src/test/java/cz/czechitas/automation/ExampleTest.java b/src/test/java/cz/czechitas/automation/ExampleTest.java
index 2a5f4d9..503ff34 100644
--- a/src/test/java/cz/czechitas/automation/ExampleTest.java
+++ b/src/test/java/cz/czechitas/automation/ExampleTest.java
@@ -15,7 +15,7 @@ final class ExampleTest extends TestRunner {
@Test
void contactsPageUrlTest() {
browser.headerMenu.goToContactsSection();
- asserter.checkPageUrl("www.czechitas.cz");
+ asserter.generalSection.checkPageUrl("www.czechitas.cz");
}
@Test
@@ -24,7 +24,7 @@ void successfulLoginTest() {
browser.loginSection.insertEmail("da-app.admin@czechitas.cz");
browser.loginSection.insertPassword("Czechitas123");
browser.loginSection.clickLoginButton();
- asserter.checkIsLoggedIn();
+ asserter.applicationSection.checkIsLoggedIn();
}
// parametrized test - find out what is wrong with this test
@@ -34,4 +34,44 @@ void icoFieldTest(String icoValue) {
browser.headerMenu.goToKindergartenAndSchoolSection();
browser.orderSection.insertICO(icoValue);
}
+
+ @Test
+ void navigation1()
+ {
+ browser.headerMenu.goToInstructionsAndFormsForParentSection();
+ }
+
+ @Test
+ void navigation2() {
+ browser.headerMenu.goToKindergartenAndSchoolSection();
+ browser.orderSection.selectSchoolInNatureOption();
+ }
+
+ @Test
+ void navigation3() {
+ browser.headerMenu.goToCreateApplicationSection();
+ browser.headerMenu.goToKindergartenAndSchoolSection();
+ browser.headerMenu.goToContactsSection();
+ browser.headerMenu.goToHomePage();
+ browser.headerMenu.goToInstructionsAndFormsForParentSection();
+ browser.headerMenu.goToInstructionsAndFormsForTeacherSection();
+ }
+
+ @Test
+ void navigation4() {
+ browser.headerMenu.goToKindergartenAndSchoolSection();
+ browser.orderSection.insertICO("1234566");
+ }
+
+ @Test
+ void navigation6() {
+ browser.loginSection.clickLoginMenuLink();
+ browser.loginSection.insertEmail("ptestak@test.cz");
+ browser.loginSection.insertPassword("PTester123");
+ browser.loginSection.clickLoginButton();
+
+ browser.applicationSection.clickCreateNewApplicationButton();
+ browser.applicationSection.selectProgrammingSection();
+ browser.applicationSection.clickCreatePythonApplicationButton();
+ }
}
diff --git a/src/test/java/cz/czechitas/automation/LowCodePracticeSolutionTest.java b/src/test/java/cz/czechitas/automation/LowCodePracticeSolutionTest.java
index 0db4160..682bef1 100644
--- a/src/test/java/cz/czechitas/automation/LowCodePracticeSolutionTest.java
+++ b/src/test/java/cz/czechitas/automation/LowCodePracticeSolutionTest.java
@@ -41,7 +41,7 @@ void navigation4() {
@Test
void navigation6() {
browser.loginSection.clickLoginMenuLink();
- browser.loginSection.insertEmail("muj@tester.cz");
+ browser.loginSection.insertEmail("muj2@tester.cz");
browser.loginSection.insertPassword("JTester123");
browser.loginSection.clickLoginButton();
@@ -64,17 +64,17 @@ void asserts2() {
@Test
void asserts3() {
browser.loginSection.clickLoginMenuLink();
- browser.loginSection.insertEmail("muj@tester.cz");
+ browser.loginSection.insertEmail("muj2@tester.cz");
browser.loginSection.insertPassword("JTester123");
browser.loginSection.clickLoginButton();
browser.headerMenu.goToApplicationsSection();
browser.applicationSection.openFirstApplicationDetailsPage();
- asserter.applicationDetailSection.checkTerm("20.07. - 24.07.2026");
- asserter.applicationDetailSection.checkFirstName("Henry");
- asserter.applicationDetailSection.checkLastName("Proper");
- asserter.applicationDetailSection.checkDateOfBirth("01.01.1990");
- asserter.applicationDetailSection.checkPaymentMethod("HotovÄ›");
+ asserter.applicationDetailsSection.checkTerm("20.07. - 24.07.2026");
+ asserter.applicationDetailsSection.checkFirstName("Henry");
+ asserter.applicationDetailsSection.checkLastName("Proper");
+ asserter.applicationDetailsSection.checkDateOfBirth("01.01.1990");
+ asserter.applicationDetailsSection.checkPaymentMethod("HotovÄ›");
}
}
diff --git a/src/test/java/cz/czechitas/automation/LowCodePracticeTwoSolutionTest.java b/src/test/java/cz/czechitas/automation/LowCodePracticeTwoSolutionTest.java
new file mode 100644
index 0000000..9ed1e61
--- /dev/null
+++ b/src/test/java/cz/czechitas/automation/LowCodePracticeTwoSolutionTest.java
@@ -0,0 +1,134 @@
+package cz.czechitas.automation;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Class with example solutions of tasks from the Low-code_automation_practice_II.pdf file
+ *
+ * @author Jiri Koudelka & Barbora Blozonova
+ * @since 1.0.0
+ */
+final class LowCodePracticeTwoSolutionTest extends TestRunner {
+
+ @Test
+ void contactsPageUrlTest() {
+ browser.headerMenu.goToContactsSection();
+ asserter.generalSection.checkPageUrl("www.czechitas.cz");
+ }
+
+ @Test
+ void navigationTaskOne() {
+ browser.headerMenu.goToKindergartenAndSchoolSection();
+ browser.orderSection.insertICO("22834958");
+ browser.orderSection.selectSchoolInNatureOption();
+ browser.orderSection.insertChildrenCount(5);
+ }
+
+ @Test
+ void assertionTaskOne() {
+ browser.loginSection.clickLoginMenuLink();
+ browser.loginSection.insertEmail("muj2@tester.cz");
+ browser.loginSection.insertPassword("JTester123");
+ browser.loginSection.clickLoginButton();
+ browser.headerMenu.goToApplicationsSection();
+ asserter.applicationSection.checkColumnExists("Jméno");
+ asserter.applicationSection.checkColumnExists("Kategorie");
+ }
+
+ @Test
+ void complexTaskOne() {
+ browser.loginSection.clickLoginMenuLink();
+ browser.loginSection.insertEmail("muj2@tester.cz");
+ browser.loginSection.insertPassword("JTester123");
+ browser.loginSection.clickLoginButton();
+ browser.headerMenu.goToApplicationsSection();
+ browser.applicationSection.clickCreateNewApplicationButton();
+ browser.applicationSection.selectProgrammingSection();
+ browser.applicationSection.clickCreatePythonApplicationButton();
+ browser.applicationDetailsSection.selectTerm("20.07. - 24.07.2026");
+ browser.applicationDetailsSection.insertStudentFirstName("Herold");
+ browser.applicationDetailsSection.insertStudentLastName("Proper");
+ browser.applicationDetailsSection.insertBirthdate("29.01.2000");
+ browser.applicationDetailsSection.clickAcceptTermsCheckbox();
+ browser.applicationDetailsSection.insertNote("Moje super poznamka");
+ browser.applicationDetailsSection.selectCashPaymentMethod();
+ browser.applicationDetailsSection.clickCreateApplicationButton();
+ asserter.applicationDetailsSection.checkPaymentMethod("HotovÄ›");
+ asserter.applicationDetailsSection.checkFirstName("Herold");
+ //asserter.applicationDetailsSection.checkLastName("Proper");
+ asserter.applicationDetailsSection.checkDateOfBirth("29.01.2000");
+ asserter.applicationDetailsSection.checkNote("Moje super poznamka");
+ }
+
+ @Test
+ void complexTaskThree() {
+ browser.loginSection.clickLoginMenuLink();
+ browser.loginSection.insertEmail("muj2@tester.cz");
+ browser.loginSection.insertPassword("JTester123");
+ browser.loginSection.clickLoginButton();
+ browser.headerMenu.goToApplicationsSection();
+ browser.applicationSection.search("Herold");
+ browser.applicationSection.clickEditFirstApplicationButton();
+ browser.applicationDetailsSection.selectBankTransferPaymentMethod();
+ browser.applicationDetailsSection.clickEditApplicationButton();
+ browser.applicationSection.openFirstApplicationDetailsPage();
+ asserter.applicationDetailsSection.checkPaymentMethod("Bankovnà převod");
+ asserter.applicationDetailsSection.checkRemainingAmountToPay("1 800 KÄŤ");
+ asserter.applicationDetailsSection.checkMessageContainsStudentLastName("Proper");
+ }
+
+ @Test
+ void complexTaskSix() {
+ browser.loginSection.clickLoginMenuLink();
+ browser.loginSection.insertEmail("muj2@tester.cz");
+ browser.loginSection.insertPassword("JTester123");
+ browser.loginSection.clickLoginButton();
+ browser.headerMenu.goToApplicationsSection();
+ browser.applicationSection.clickCreateNewApplicationButton();
+ browser.applicationSection.selectProgrammingSection();
+ browser.applicationSection.clickCreatePythonApplicationButton();
+ browser.applicationDetailsSection.selectTerm("20.07. - 24.07.2026");
+ browser.applicationDetailsSection.insertStudentFirstName("Herold");
+ var generated = browser.generateRandomName(15);
+ browser.applicationDetailsSection.insertStudentLastName(generated);
+ browser.applicationDetailsSection.insertBirthdate("29.01.2000");
+ browser.applicationDetailsSection.selectCashPaymentMethod();
+ browser.applicationDetailsSection.clickAcceptTermsCheckbox();
+ browser.applicationDetailsSection.clickCreateApplicationButton();
+ browser.headerMenu.goToApplicationsSection();
+ browser.applicationSection.search(generated);
+ asserter.applicationSection.checkNumberOfApplications(1);
+ browser.loginSection.logout();
+ browser.loginSection.clickLoginMenuLink();
+ browser.loginSection.insertEmail("muj2@tester.cz");
+ browser.loginSection.insertPassword("JTester123");
+ browser.loginSection.clickLoginButton();
+ browser.headerMenu.goToApplicationsSection();
+ browser.applicationSection.search(generated);
+ asserter.applicationSection.checkApplicationsTableIsEmpty();
+ }
+
+ @Test
+ void complexTaskSeven() {
+ browser.loginSection.clickLoginMenuLink();
+ browser.loginSection.insertEmail("muj2@tester.cz");
+ browser.loginSection.insertPassword("JTester123");
+ browser.loginSection.clickLoginButton();
+ browser.headerMenu.goToApplicationsSection();
+ browser.profileSection.goToProfilePage();
+ browser.profileSection.insertPassword("Aaabbb123");
+ browser.profileSection.insertPasswordVerification("Aaabbb123");
+ browser.profileSection.clickChangeButton();
+ browser.waitFor(10);
+ browser.loginSection.logout();
+ browser.loginSection.clickLoginMenuLink();
+ browser.loginSection.insertEmail("muj2@tester.cz");
+ browser.loginSection.insertPassword("Aaabbb123");
+ browser.loginSection.clickLoginButton();
+ asserter.applicationSection.checkIsLoggedIn();
+ browser.profileSection.goToProfilePage();
+ browser.profileSection.insertPassword("JTester123");
+ browser.profileSection.insertPasswordVerification("JTester123");
+ browser.profileSection.clickChangeButton();
+ }
+}
diff --git a/src/test/java/cz/czechitas/automation/assertion/ApplicationAssertion.java b/src/test/java/cz/czechitas/automation/assertion/ApplicationAssertion.java
index 155392c..58ff86c 100644
--- a/src/test/java/cz/czechitas/automation/assertion/ApplicationAssertion.java
+++ b/src/test/java/cz/czechitas/automation/assertion/ApplicationAssertion.java
@@ -61,4 +61,9 @@ public void checkNumberOfApplications(int applicationsNumber) {
assertThat(applicationsCountElement.getText()).contains("Zobrazeno " + applicationsNumber + " aĹľ " + applicationsNumber +
" záznamů z " + applicationsNumber);
}
+
+ public void checkIsLoggedIn() {
+ var loggedInText = elementFinder.findByCssSelector(".navbar-right span");
+ assertThat(loggedInText.getText()).isEqualTo("Přihlášen");
+ }
}
diff --git a/src/test/java/cz/czechitas/automation/assertion/AssertionFacade.java b/src/test/java/cz/czechitas/automation/assertion/AssertionFacade.java
index 64c02ab..9754aea 100644
--- a/src/test/java/cz/czechitas/automation/assertion/AssertionFacade.java
+++ b/src/test/java/cz/czechitas/automation/assertion/AssertionFacade.java
@@ -19,13 +19,19 @@ public final class AssertionFacade {
private final ElementFinderInterface elementFinder;
public final ApplicationAssertion applicationSection;
- public final ApplicationDetailAssertion applicationDetailSection;
-
- public AssertionFacade(WebDriver webDriver)
- {
- this.elementFinder = new ElementFinder(webDriver);
+ public final ApplicationDetailAssertion applicationDetailsSection;
+ public final LoginAssertion loginSection;
+ public final HomePageAssertion homePageSection;
+ public final GeneralAssertion generalSection;
+
+ public AssertionFacade(WebDriver webDriver) {
+ var elementFinder = new ElementFinder(webDriver);
+ this.elementFinder = elementFinder;
this.applicationSection = new ApplicationAssertion(elementFinder);
- this.applicationDetailSection = new ApplicationDetailAssertion(elementFinder);
+ this.applicationDetailsSection = new ApplicationDetailAssertion(elementFinder);
+ this.loginSection = new LoginAssertion(elementFinder);
+ this.homePageSection = new HomePageAssertion(elementFinder);
+ this.generalSection = new GeneralAssertion(elementFinder);
}
public void checkPageUrl(String url) {
diff --git a/src/test/java/cz/czechitas/automation/assertion/GeneralAssertion.java b/src/test/java/cz/czechitas/automation/assertion/GeneralAssertion.java
new file mode 100644
index 0000000..f9ac2c3
--- /dev/null
+++ b/src/test/java/cz/czechitas/automation/assertion/GeneralAssertion.java
@@ -0,0 +1,29 @@
+package cz.czechitas.automation.assertion;
+
+import cz.czechitas.automation.ElementFinder;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+import java.util.Objects;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Application specific assertions
+ *
+ * @author Adam Abbod
+ * @since 1.0.0
+ */
+@ParametersAreNonnullByDefault
+public final class GeneralAssertion {
+
+ private final ElementFinder elementFinder;
+
+ public GeneralAssertion(ElementFinder elementFinder) {
+ this.elementFinder = Objects.requireNonNull(elementFinder);
+ }
+
+ public void checkPageUrl(String url) {
+ var urlElement = elementFinder.findByXPath("//a[text()='www.czechitas.cz']");
+ assertThat(urlElement.getText()).isEqualTo(url);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/cz/czechitas/automation/assertion/HomePageAssertion.java b/src/test/java/cz/czechitas/automation/assertion/HomePageAssertion.java
new file mode 100644
index 0000000..b4538f6
--- /dev/null
+++ b/src/test/java/cz/czechitas/automation/assertion/HomePageAssertion.java
@@ -0,0 +1,29 @@
+package cz.czechitas.automation.assertion;
+
+import cz.czechitas.automation.ElementFinder;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+import java.util.Objects;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Application specific assertions
+ *
+ * @author Adam Abbod
+ * @since 1.0.0
+ */
+@ParametersAreNonnullByDefault
+public final class HomePageAssertion {
+
+ private final ElementFinder elementFinder;
+
+ public HomePageAssertion(ElementFinder elementFinder) {
+ this.elementFinder = Objects.requireNonNull(elementFinder);
+ }
+
+ public void checkProgrammingSectionPresence() {
+ var programmingText = elementFinder.findByCssSelector(".main_content .card-img-overlay");
+ assertThat(programmingText.getText().trim()).isEqualTo("ProgramovánĂ");
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/cz/czechitas/automation/assertion/LoginAssertion.java b/src/test/java/cz/czechitas/automation/assertion/LoginAssertion.java
new file mode 100644
index 0000000..f11b878
--- /dev/null
+++ b/src/test/java/cz/czechitas/automation/assertion/LoginAssertion.java
@@ -0,0 +1,29 @@
+package cz.czechitas.automation.assertion;
+
+import cz.czechitas.automation.ElementFinder;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+import java.util.Objects;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Application specific assertions
+ *
+ * @author Adam Abbod
+ * @since 1.0.0
+ */
+@ParametersAreNonnullByDefault
+public final class LoginAssertion {
+
+ private final ElementFinder elementFinder;
+
+ public LoginAssertion(ElementFinder elementFinder) {
+ this.elementFinder = Objects.requireNonNull(elementFinder);
+ }
+
+ public void checkRegistrationButtonPresence() {
+ var registerButton = elementFinder.findByCssSelector(".btn-secondary");
+ assertThat(registerButton.getText().trim()).isEqualTo("Zaregistrujte se");
+ }
+}
\ No newline at end of file