Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 40a4764c authored by Yevhen Povietkin's avatar Yevhen Povietkin Committed by rui rodrigues
Browse files

[SimplLabs] added test for logout; added function to wait element visibility

parent 89273a7e
No related branches found
No related tags found
No related merge requests found
......@@ -5,4 +5,5 @@ public class DataSpaces {
public static final String DATA_SPACE_STATUS_LABEL = ".slabs-chip";
public static final String INTERACT_BUTTON = ".mdc-button.mdc-button--unelevated";
public static final String STATUS_DROPDOWN_ITEM = ".mat-mdc-option .mdc-list-item__primary-text";
public static final String LOGOUT_ICON = "[aria-label='Logout icon']";
}
......@@ -3,8 +3,7 @@ package configuration.ui.locators.simplLabs;
public class Login {
public static final String USERNAME = "id=username";
public static final String PASSWORD = "id=password";
public static final String CLICK_LOGIN = "id=kc-login";
public static final String LOGIN_BUTTON = "id=kc-login";
public static final String AUTH_CODE_FIELD = "id=otp";
public static final String WRONG_CODE_ERROR = "id=input-error-otp-code";
public static final String CLICK_LOGOUT = "[aria-label='Logout icon']";
}
package framework.ui;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;
import com.microsoft.playwright.*;
import com.microsoft.playwright.options.WaitForSelectorState;
import io.cucumber.java.After;
import io.cucumber.java.Before;
import io.cucumber.java.Scenario;
......@@ -49,4 +47,26 @@ public class UiSetup {
page.close();
browser.close();
}
/**
* Returns a LocatorOptions object with the specified text filter.
*
* @param text The text to filter the locator by.
* @return LocatorOptions with the text filter applied.
*/
public static Page.LocatorOptions getLocatorOptionsWithText(String text) {
return new Page.LocatorOptions().setHasText(text);
}
/**
* Returns a Locator object that filters by the specified text.
*
* @param page The Playwright Page object.
* @param selector The CSS selector to locate the element.
* @param text The text to filter the locator by.
* @return Locator with the text filter applied.
*/
public static Locator getLocatorWithText(Page page, String selector, String text) {
return page.locator(selector).filter(new Locator.FilterOptions().setHasText(text));
}
}
......@@ -2,6 +2,8 @@ package helpers;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.assertions.PlaywrightAssertions;
import framework.ui.UiSetup;
import static configuration.ui.locators.simplLabs.DataSpaces.*;
......@@ -15,17 +17,22 @@ public class DataSpacesPage {
public void selectStatusFilter(String status) {
page.click(STATUS_FILTER);
page.waitForSelector(STATUS_DROPDOWN_ITEM);
Locator locator = page.locator(STATUS_DROPDOWN_ITEM)
.filter(new Locator.FilterOptions().setHasText(status));
locator.click();
Locator statusLocator = UiSetup.getLocatorWithText(page, STATUS_DROPDOWN_ITEM, status);
statusLocator.click();
page.waitForLoadState();
}
public boolean areDataSpacesDisplayedWithStatus(String status) {
return page.locator(DATA_SPACE_STATUS_LABEL, new Page.LocatorOptions().setHasText(status)).isVisible();
public void checkDataSpacesDisplayedWithStatus(String status) {
PlaywrightAssertions.assertThat(page.locator(DATA_SPACE_STATUS_LABEL, UiSetup.getLocatorOptionsWithText(status))).isVisible();
}
public void checkTheUserIsLoggedIn() {
PlaywrightAssertions.assertThat(page.locator(INTERACT_BUTTON)).isVisible();
}
public boolean isUserLoggedIn() {
return page.waitForSelector(INTERACT_BUTTON, new Page.WaitForSelectorOptions().setTimeout(10000)) != null;
public void clickLogoutButton() {
page.click(LOGOUT_ICON);
}
}
package helpers;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.assertions.PlaywrightAssertions;
import static configuration.ui.locators.simplLabs.Login.*;
......@@ -40,10 +41,6 @@ public class LoginPage {
fillGoogleAuthCode();
}
public void logoutApplication() {
clickOnLogout();
}
public void enterUserName(String email) {
page.fill(USERNAME, email);
}
......@@ -53,10 +50,10 @@ public class LoginPage {
}
public void clickLoginButton() {
page.click(CLICK_LOGIN);
page.click(LOGIN_BUTTON);
}
public void clickOnLogout() {
page.click(CLICK_LOGOUT);
public void checkTheLoginButtonIsVisible() {
PlaywrightAssertions.assertThat(page.locator(LOGIN_BUTTON)).isVisible();
}
}
\ No newline at end of file
@logout
Feature: User Logout
@SIMPL-3603
Scenario: User logs out successfully
Given the user is on the 'Data spaces' page
When the user clicks on the 'Log out' button next to the users email
Then the login page is displayed
......@@ -7,7 +7,6 @@ import helpers.LoginPage;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import org.junit.Assert;
import static configuration.ui.data.simplLabs.Login.*;
......@@ -23,7 +22,7 @@ public class DataSpacesSteps {
public void theUserIsOnTheDataSpacesPage() {
page.navigate(URL);
login.loginIntoApplication(USERNAME, PASSWORD);
Assert.assertTrue(dataSpacesPage.isUserLoggedIn());
dataSpacesPage.checkTheUserIsLoggedIn();
}
@When("the user selects the status filter {string}")
......@@ -32,8 +31,18 @@ public class DataSpacesSteps {
uiSetup.attachScreenshot();
}
@When("the user clicks on the 'Log out' button next to the users email")
public void theUserClicksOnTheButtonNextToTheUsersEmail() {
dataSpacesPage.clickLogoutButton();
}
@Then("the system should display data spaces with the status {string}")
public void theSystemShouldDisplayDataSpacesWithTheStatus(String status) {
Assert.assertTrue(dataSpacesPage.areDataSpacesDisplayedWithStatus(status));
dataSpacesPage.checkDataSpacesDisplayedWithStatus(status);
}
@Then("the login page is displayed")
public void theLoginPageIsDisplayed() {
login.checkTheLoginButtonIsVisible();
}
}
......@@ -9,7 +9,6 @@ import io.cucumber.java.Scenario;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.junit.Assert;
import static configuration.ui.data.simplLabs.Login.*;
public class LoginSteps {
......@@ -28,15 +27,8 @@ public class LoginSteps {
login.loginIntoApplication(USERNAME, PASSWORD);
}
@When("user provides Google 2FA code")
public void userProvidesGoogle2FACode() {
String totpCode = GoogleAuthenticatorHelper.getTOTPCode();
page.fill("#otp", totpCode);
page.click("#kc-login");
}
@Then("user should be logged in successfully")
public void userShouldBeLoggedInSuccessfully() {
Assert.assertTrue(dataSpacesPage.isUserLoggedIn());
dataSpacesPage.checkTheUserIsLoggedIn();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment