Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 1 addition & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,7 @@
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/cz/czechitas/automation/PublicMenuAction.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package cz.czechitas.automation;

import org.openqa.selenium.NoSuchElementException;

import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Objects;

Expand Down Expand Up @@ -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();
}
Comment on lines 58 to +66
}

private void clickForTeacherMenuItem() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Comment on lines +54 to +57
}
}
44 changes: 42 additions & 2 deletions src/test/java/cz/czechitas/automation/ExampleTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -34,4 +34,44 @@ void icoFieldTest(String icoValue) {
browser.headerMenu.goToKindergartenAndSchoolSection();
browser.orderSection.insertICO(icoValue);
}

@Test
void navigation1()
{
Comment on lines +39 to +40
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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -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ě");
}
}
Original file line number Diff line number Diff line change
@@ -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");
Comment on lines +45 to +51
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();
Comment on lines +113 to +132
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Comment on lines 20 to +34
}

public void checkPageUrl(String url) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
Comment on lines +26 to +28
}
Loading
Loading