Commit d6c445bd authored by Vadim Nesmashnov's avatar Vadim Nesmashnov

RIHAKB-860, RIHA haldajana soovin, et RIHA manuaalsed funktsionaalsuse testid...

RIHAKB-860, RIHA haldajana soovin, et RIHA manuaalsed funktsionaalsuse testid oleks võimalikult suures ulatuses automatiseeritud
parent 5a737512
......@@ -42,6 +42,26 @@
<artifactId>cucumber-java</artifactId>
<version>4.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package ee.ria.riha;
public final class Timeouts {
public static final int TABLE_SORT_TIMEOUT = 2000;
public static final int DISPLAY_ELEMENT_TIMEOUT = 15000;
}
package ee.ria.riha.context;
import java.util.HashMap;
import java.util.Map;
public class ScenarioContext {
public static final String APP_URL_KEY = "appUrl";
public static final String DEFAULT_APP_URL = "https://riha-browser-ik.ci.kit";
private final Map<String, String> context = new HashMap<>();
public ScenarioContext() {
String url = System.getProperty("url");
if (url == null) {
url = DEFAULT_APP_URL;
}
context.put(APP_URL_KEY, url);
}
public void saveToContext(String key, String value) {
context.put(key, value);
}
public String getFromContext(String key) {
return context.get(key);
}
public void clear() {
context.clear();
}
}
package ee.ria.riha.driver;
import ee.ria.riha.pages.PageFactory;
import io.cucumber.java.Before;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
......@@ -9,9 +10,10 @@ import org.openqa.selenium.firefox.FirefoxDriver;
public class Setup {
public static WebDriver driver;
public static PageFactory pageFactory;
@Before
public void setWebDriver() throws Exception {
public void init() {
String browser = System.getProperty("browser");
if (browser == null) {
browser = "chrome";
......@@ -32,5 +34,7 @@ public class Setup {
default:
throw new IllegalArgumentException("Browser \"" + browser + "\" isn't supported.");
}
pageFactory = new PageFactory();
}
}
......@@ -22,12 +22,6 @@ public class Wait {
wait.until(condition);
}
public void forLoading(int timeout) {
ExpectedCondition<Object> condition = ExpectedConditions.jsReturnsValue("return document.readyState==\"complete\";");
String timeoutMessage = "Page didn't load after " + Integer.toString(timeout) + " seconds.";
waitUntilCondition(condition, timeoutMessage, timeout);
}
public void forElementToBeDisplayed(int timeout, WebElement webElement, String webElementName) {
ExpectedCondition<WebElement> condition = ExpectedConditions.visibilityOf(webElement);
String timeoutMessage = webElementName + " wasn't displayed after " + Integer.toString(timeout) + " seconds.";
......@@ -39,4 +33,12 @@ public class Wait {
String timeoutMessage = elementName + " elements were not displayed after " + Integer.toString(timeout) + " seconds.";
waitUntilCondition(condition, timeoutMessage, timeout);
}
public void sleep(int timeout) {
try {
Thread.sleep(timeout);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package ee.ria.riha.pages;
import ee.ria.riha.context.ScenarioContext;
import ee.ria.riha.driver.Setup;
import ee.ria.riha.driver.Wait;
import org.openqa.selenium.WebDriver;
......@@ -7,9 +8,15 @@ import org.openqa.selenium.WebDriver;
public class BasePage {
protected WebDriver driver;
protected Wait wait;
protected ScenarioContext scenarioContext;
public BasePage() {
public BasePage(ScenarioContext scenarioContext) {
this.driver = Setup.driver;
this.wait = new Wait(this.driver);
this.wait = new Wait(driver);
this.scenarioContext = scenarioContext;
}
public String getCurrentUrl() {
return driver.getCurrentUrl();
}
}
package ee.ria.riha.pages;
import ee.ria.riha.pages.BasePage;
import ee.ria.riha.context.ScenarioContext;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import static ee.ria.riha.Timeouts.DISPLAY_ELEMENT_TIMEOUT;
public class HomePage extends BasePage {
@FindBy(xpath = "//img[@src='assets/images/base/RIHA.png']")
......@@ -17,20 +19,25 @@ public class HomePage extends BasePage {
@FindBy(css = ".card:nth-child(2) .btn")
private WebElement goToMyInfosystemsPageButton;
@FindBy(css = ".nav-item:nth-child(2) > .nav-link")
private WebElement goToInfosystemsPageLink;
@FindBy(tagName = "ngb-modal-window")
private WebElement modalContainer;
public HomePage() {
public HomePage(ScenarioContext scenarioContext) {
super(scenarioContext);
PageFactory.initElements(driver, this);
}
public void goToHomePage(String url) {
driver.get(url);
wait.forLoading(5);
public void goToPage(String path) {
String url = scenarioContext.getFromContext(ScenarioContext.APP_URL_KEY);
driver.get(url + path);
checkLogoDisplay();
}
public void checkLogoDisplay() {
wait.forElementToBeDisplayed(5, this.logo, "Logo");
wait.forElementToBeDisplayed(DISPLAY_ELEMENT_TIMEOUT, this.logo, "Logo");
}
public String getTitle() {
......@@ -42,23 +49,25 @@ public class HomePage extends BasePage {
}
public void selectSecondOrganization() {
this.wait.forPresenceOfElements(25, By.tagName("ngb-modal-window"), "modal");
this.modalContainer.findElement(By.cssSelector("tr:nth-child(2) > td")).click();
wait.forPresenceOfElements(25, By.tagName("ngb-modal-window"), "modal");
modalContainer.findElement(By.cssSelector("tr:nth-child(2) > td")).click();
}
public void selectOrganization(String organization) {
this.driver.findElement(By.cssSelector(".right a")).click();
this.wait.forPresenceOfElements(2, By.tagName("ngb-modal-window"), "modal");
this.modalContainer.findElement(By.xpath("//td[contains(.,'" + organization +"')]")).click();
driver.findElement(By.cssSelector(".right a")).click();
wait.forPresenceOfElements(2, By.tagName("ngb-modal-window"), "modal");
modalContainer.findElement(By.xpath("//td[contains(.,'" + organization +"')]")).click();
}
public void goToLoginPage() {
this.loginButton.click();
wait.forLoading(5);
loginButton.click();
}
public void goToMyInfosystemsPage() {
this.goToMyInfosystemsPageButton.click();
wait.forLoading(5);
goToMyInfosystemsPageButton.click();
}
public void goToInfosystemsPage() {
goToInfosystemsPageLink.click();
}
}
\ No newline at end of file
......@@ -7,6 +7,8 @@ import org.openqa.selenium.support.PageFactory;
import java.util.stream.Collectors;
import static ee.ria.riha.Timeouts.DISPLAY_ELEMENT_TIMEOUT;
public class InfosystemPage extends BasePage {
@FindBy(xpath = "//div[@id='uldkirjeldus']/app-producer-details-general/section/div[2]/div[3]/div")
......@@ -17,7 +19,7 @@ public class InfosystemPage extends BasePage {
}
public String getAssociatedTopicsList() {
wait.forElementToBeDisplayed(5, topicsDiv, "topicsDiv");
wait.forElementToBeDisplayed(DISPLAY_ELEMENT_TIMEOUT, topicsDiv, "topicsDiv");
return topicsDiv.findElements(By.tagName("button")).stream().map(button -> button.getText()).collect(Collectors.joining(","));
}
......
package ee.ria.riha.pages;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
......@@ -9,7 +10,19 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static ee.ria.riha.Timeouts.DISPLAY_ELEMENT_TIMEOUT;
import static ee.ria.riha.Timeouts.TABLE_SORT_TIMEOUT;
public class InfosystemsPage extends BasePage {
@FindBy(xpath = "//main[@id='content']/app-browser-list/section/div[2]/a")
private WebElement detailedSearchLink;
@FindBy(id = "owner-name-input")
private WebElement ownerInput;
@FindBy(id = "name-input")
private WebElement nameInput;
@FindBy(id = "topics-input")
private WebElement topicsInput;
......@@ -20,14 +33,14 @@ public class InfosystemsPage extends BasePage {
PageFactory.initElements(driver, this);
}
public List<String> getFoundInfosystemsTopics() throws InterruptedException {
this.wait.forElementToBeDisplayed(10, infosystemsTable, "info-systems-table");
Thread.sleep(2000);
public List<String> getFoundInfosystemsTopics() {
waitForLoading();
List<String> topics = new ArrayList<>();
List<WebElement> tableRows = infosystemsTable.findElements(By.tagName("tr"));
tableRows.forEach(row -> {
if(row.findElements(By.className("topics")).size() > 0) {
if (row.findElements(By.className("topics")).size() > 0) {
topics.add(row.findElement(By.className("topics")).findElements(By.tagName("button")).stream().map(WebElement::getText).collect(Collectors.joining(",")));
}
});
......@@ -35,7 +48,47 @@ public class InfosystemsPage extends BasePage {
return topics;
}
public List<String> getFoundInfosystemsShortName() {
waitForLoading();
List<String> sortNames = new ArrayList<>();
List<WebElement> tableRows = infosystemsTable.findElements(By.tagName("tr"));
tableRows.forEach(row -> {
sortNames.add(row.findElement(By.xpath("//td[2]")).findElement(By.tagName("a")).getText());
});
return sortNames;
}
public void openDetailedSearchForm() {
waitForLoading();
detailedSearchLink.click();
}
public String getTopicInputText() {
waitForLoading();
return topicsInput.getAttribute("value");
}
public String getOwnerInputText() {
return ownerInput.getAttribute("value");
}
public String getNameInputText() {
return nameInput.getAttribute("value");
}
public void searchByOwnerNameAndTopic(String owner, String name, String topic) {
ownerInput.sendKeys(owner);
nameInput.sendKeys(name);
topicsInput.sendKeys(topic);
topicsInput.sendKeys(Keys.RETURN);
waitForLoading();
}
public void waitForLoading() {
wait.forElementToBeDisplayed(DISPLAY_ELEMENT_TIMEOUT, infosystemsTable, "info-systems-table");
wait.sleep(TABLE_SORT_TIMEOUT);
}
}
package ee.ria.riha.pages;
import ee.ria.riha.pages.BasePage;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
......@@ -23,12 +22,12 @@ public class LoginPage extends BasePage {
}
public void selectMobiilIdTab() {
this.mobiilIdTab.click();
mobiilIdTab.click();
}
public void enterIsikukoodAndTelefoninumber(String personalCode, String phoneNumber) {
this.isikukoodInput.sendKeys(personalCode);
this.telefoninumberInput.sendKeys(phoneNumber);
this.jatkanButton.click();
isikukoodInput.sendKeys(personalCode);
telefoninumberInput.sendKeys(phoneNumber);
jatkanButton.click();
}
}
......@@ -10,6 +10,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static ee.ria.riha.Timeouts.DISPLAY_ELEMENT_TIMEOUT;
import static ee.ria.riha.Timeouts.TABLE_SORT_TIMEOUT;
public class MyInfosystemsPage extends BasePage {
@FindBy(xpath = "//main[@id='content']/app-producer-list/section/div[2]/a[4]")
private WebElement detailedSearchLink;
......@@ -40,17 +43,17 @@ public class MyInfosystemsPage extends BasePage {
}
public void openDetailedSearchForm() {
this.detailedSearchLink.click();
detailedSearchLink.click();
}
public void searchByTopic(String topic) throws Exception {
this.topicsInput.sendKeys(topic);
this.topicsInput.sendKeys(Keys.RETURN);
this.wait.forElementToBeDisplayed(10, infosystemsTable, "infosystems-table");
Thread.sleep(2000);
public void searchByTopic(String topic) {
topicsInput.sendKeys(topic);
topicsInput.sendKeys(Keys.RETURN);
}
public List<String> getFoundInfosystemsTopics() {
waitForLoading();
List<String> topics = new ArrayList<>();
List<WebElement> tableRows = infosystemsTable.findElements(By.tagName("tr"));
......@@ -66,14 +69,19 @@ public class MyInfosystemsPage extends BasePage {
}
public void goToCreateNewInfosystemPage() {
this.wait.forElementToBeDisplayed(15, createNewLink, "createNewLink");
this.createNewLink.click();
wait.forElementToBeDisplayed(DISPLAY_ELEMENT_TIMEOUT, createNewLink, "createNewLink");
createNewLink.click();
}
public void enterNameShortNameAndPurpose(String name, String shortName, String purpose) {
nameInput.sendKeys(name);
shortNameInput.sendKeys(shortName);
purposeInput.sendKeys(purpose);
submitButton.click();
}
public void enterNameSHortNameAndPurpose(String name, String shortName, String purpose) {
this.nameInput.sendKeys(name);
this.shortNameInput.sendKeys(shortName);
this.purposeInput.sendKeys(purpose);
this.submitButton.click();
public void waitForLoading() {
wait.forElementToBeDisplayed(DISPLAY_ELEMENT_TIMEOUT, infosystemsTable, "infosystems-table");
wait.sleep(TABLE_SORT_TIMEOUT);
}
}
package ee.ria.riha.pages;
import ee.ria.riha.context.ScenarioContext;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class PageFactory {
private ScenarioContext scenarioContext;
private Map<Class, Object> pages;
public PageFactory() {
pages = new HashMap<>();
scenarioContext = new ScenarioContext();
}
public <T extends BasePage> T getPage(Class<T> pageClass) {
try {
T page = (T) pages.get(pageClass);
if (page == null) {
page = pageClass.getDeclaredConstructor(ScenarioContext.class).newInstance(scenarioContext);
pages.put(pageClass, page);
}
return page;
} catch (Exception e) {
log.error("Error creating page", e);
throw new RuntimeException("Error creating page");
}
}
}
package ee.ria.riha;
import ee.ria.riha.driver.Setup;
import ee.ria.riha.pages.HomePage;
import ee.ria.riha.pages.LoginPage;
import io.cucumber.java.en.Given;
......@@ -9,16 +10,16 @@ public class BackgroundSteps {
private LoginPage loginPage;
public BackgroundSteps() {
this.loginPage = new LoginPage();
this.homePage = new HomePage();
loginPage = Setup.pageFactory.getPage(LoginPage.class);
homePage = Setup.pageFactory.getPage(HomePage.class);
}
@Given("^User is logged in to \"([^\"]*)\" as \"([^\"]*)\" using tel. number \"([^\"]*)\"$")
@Given("User is logged in to {string} as {string} using tel. number {string}")
public void userIsLoggedInAsTestUser(String url, String personalCode, String phoneNumber) {
this.homePage.goToHomePage(url);
this.homePage.goToLoginPage();
this.loginPage.selectMobiilIdTab();
this.loginPage.enterIsikukoodAndTelefoninumber(personalCode, phoneNumber);
this.homePage.selectSecondOrganization();
homePage.goToPage(url);
homePage.goToLoginPage();
loginPage.selectMobiilIdTab();
loginPage.enterIsikukoodAndTelefoninumber(personalCode, phoneNumber);
homePage.selectSecondOrganization();
}
}
package ee.ria.riha;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(features = {"src/test/resources/ee/ria/riha/SearchInfosystems.feature"},
strict = false, plugin = {"pretty",
"json:target/cucumber_json_reports/search-infosystems-page.json",
"html:target/search-infosystems-page-html"},
glue = {"ee.ria.riha"})
public class SearchInfosytemsTest {
}
package ee.ria.riha.homepage;
import ee.ria.riha.driver.Setup;
import ee.ria.riha.pages.HomePage;
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
......@@ -10,47 +11,52 @@ public class HomePageSteps {
private HomePage homePage;
public HomePageSteps() {
this.homePage = new HomePage();
homePage = Setup.pageFactory.getPage(HomePage.class);
}
@Given("^A user navigates to HomePage \"([^\"]*)\"$")
public void aUserNavigatesToHomePage(String url) {
this.homePage.goToHomePage(url);
@Given("HomePage: user navigates to page {string}")
public void userNavigatesToPage(String url) {
homePage.goToPage(url);
}
@Given("^User selects organization \"([^\"]*)\"$")
@Given("HomePage: user selects organization {string}")
public void userSelectsOrganization(String organization) {
this.homePage.selectOrganization(organization);
homePage.selectOrganization(organization);
}
@Given("^User opens 'my organization infosystems page'$")
@And("HomePage: user opens 'infosystems' page")
public void userOpensInfosystemsPage() {
homePage.goToInfosystemsPage();
}
@And("HomePage: user opens 'my organization infosystems' page")
public void userOpensMyInfosystemsPage() {
this.homePage.goToMyInfosystemsPage();
homePage.goToMyInfosystemsPage();
}
@And("^user clicks on login button$")
@And("HomePage: user clicks on login button")
public void userClicksOnLoginButton() {
this.homePage.goToLoginPage();
homePage.goToLoginPage();
}
@Then("^logo is displayed$")
@Then("HomePage: logo is displayed")
public void googleLogoIsDisplayed() {
this.homePage.checkLogoDisplay();
homePage.checkLogoDisplay();
}
@Then("^page title is \"([^\"]*)\"$")
@Then("HomePage: page title is {string}")
public void pageTitleIs(String title) {
Assert.assertTrue("Displayed title is " + this.homePage.getTitle() + " instead of " + title, title.equals(this.homePage.getTitle()));
Assert.assertTrue("Displayed title is " + homePage.getTitle() + " instead of " + title, title.equals(homePage.getTitle()));
}
@Then("^home page is opened showing logged in user's name \"([^\"]*)\"$")
@Then("HomePage: home page is opened showing logged in user's name {string}")
public void homePageIsOpenedShowingLoggedInUsersName(String name) {
this.homePage.selectSecondOrganization();
Assert.assertTrue("Displayed logged in user's name is " + this.homePage.getLoggedInUsersName() + " instead of " + name, this.homePage.getLoggedInUsersName().contains(name));
homePage.selectSecondOrganization();
Assert.assertTrue("Displayed logged in user's name is " + homePage.getLoggedInUsersName() + " instead of " + name, homePage.getLoggedInUsersName().contains(name));
}
@Then("^Organization name \"([^\"]*)\" is shown next to user's name$")
@Then("HomePage: organization name {string} is shown next to user's name")
public void organizationNameIsShownNextToUsersName(String organizationName) {
Assert.assertTrue("Organization name " + organizationName + " is not shown", this.homePage.getLoggedInUsersName().contains(organizationName));
Assert.assertTrue("Organization name " + organizationName + " is not shown", homePage.getLoggedInUsersName().contains(organizationName));
}
}
package ee.ria.riha.infosystempage;
import ee.ria.riha.driver.Setup;
import ee.ria.riha.pages.InfosystemPage;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
......@@ -9,16 +10,16 @@ public class InfosystemPageSteps {
private InfosystemPage infosystemPage;
public InfosystemPageSteps() {
this.infosystemPage = new InfosystemPage();
infosystemPage = Setup.pageFactory.getPage(InfosystemPage.class);
}
@When("^user clicks on \"([^\"]*)\" topic$")
@When("InfosytemPage: user clicks on {string} topic")
public void userClicksOnTopic(String topic) {
this.infosystemPage.clickOnTopic(topic);
infosystemPage.clickOnTopic(topic);
}
@Then("^\"([^\"]*)\" topic is present in associated topics list$")
@Then("InfosytemPage: {string} topic is present in associated topics list")
public void topicIsPresentInAssociatedTopicsList(String topic) {
Assert.assertTrue("Associated topic list doen't contain topic " + topic, this.infosystemPage.getAssociatedTopicsList().contains(topic.toUpperCase()));
Assert.assertTrue("Associated topic list doen't contain topic " + topic, infosystemPage.getAssociatedTopicsList().contains(topic.toUpperCase()));
}
}
package ee.ria.riha.infosystemspage;
import ee.ria.riha.driver.Setup;
import ee.ria.riha.pages.InfosystemsPage;
import io.cucumber.java.en.And;
import io.cucumber.java.en.Then;
......@@ -9,16 +10,46 @@ public class InfosystemsPageSteps {
private InfosystemsPage infosystemsPage;
public InfosystemsPageSteps() {
this.infosystemsPage = new InfosystemsPage();
infosystemsPage = Setup.pageFactory.getPage(InfosystemsPage.class);
}
@And("^topic input has \"([^\"]*)\" text$")
@And("InfosystemsPage: user clicks on 'täpsusta otsingut'")
public void userClicksOnDetailedSearchLink() {
infosystemsPage.openDetailedSearchForm();
}
@And("InfosytemsPage: topic input has {string} text")
public void topicInputHasText(String text) {
Assert.assertTrue("Wrong text in topic input " + infosystemsPage.getTopicInputText(), text.equalsIgnoreCase(infosystemsPage.getTopicInputText()));
}
@Then("^All displayed infosystems on 'infosystems' page have \"([^\"]*)\" associated topic$")
public void allDisplayedInfosystemsHaveTopic(String topic) throws Exception {
this.infosystemsPage.getFoundInfosystemsTopics().forEach(topics -> Assert.assertTrue("Found infosystem desn't have associated topic " + topic, topics.contains(topic.toUpperCase())));
@And("InfosystemsPage: user enters 'owner name' {string}, 'name' {string} and 'search topic' {string} and presses 'enter'")
public void userSearchesByTopicOwnerNameAndName(String ownerName, String name, String topic) {
infosystemsPage.searchByOwnerNameAndTopic(ownerName, name, topic);
}
@Then("InfosytemsPage: all displayed infosystems on 'infosystems' page have {string} associated topic")
public void allDisplayedInfosystemsHaveTopic(String topic) {
infosystemsPage.getFoundInfosystemsTopics().forEach(topics -> Assert.assertTrue("Found infosystem desn't have associated topic " + topic, topics.contains(topic.toUpperCase())));
}
@Then("InfosystemsPage: URL contains 'ownerName={string}', 'name={string}' and 'topic={string}' elements")
public void urlContainsOwnerNameAndtopicElements(String ownerName, String name, String topic) {
Assert.assertTrue("Search URL doesn't contain 'ownerName' element", infosystemsPage.getCurrentUrl().contains("ownerName=" + ownerName));
Assert.assertTrue("Search URL doesn't contain 'name' element", infosystemsPage.getCurrentUrl().contains("name=" + name));
Assert.assertTrue("Search URL doesn't contain 'topic' element", infosystemsPage.getCurrentUrl().contains("topic=" + topic));
}
@Then("InfosytemsPage: 'owner' input has {string} text, 'name' input has {string} text and 'topic' input has {string} text")
public void inputsHaveAppropriateText(String ownerName, String name, String topic) {
Assert.assertTrue("Wrong text in owner input " + infosystemsPage.getTopicInputText(), ownerName.equalsIgnoreCase(infosystemsPage.getOwnerInputText()));
Assert.assertTrue("Wrong text in name input " + infosystemsPage.getTopicInputText(), name.equalsIgnoreCase(infosystemsPage.getNameInputText()));
Assert.assertTrue("Wrong text in topic input " + infosystemsPage.getTopicInputText(), topic.equalsIgnoreCase(infosystemsPage.getTopicInputText()));
}
@And("InfosytemsPage: found infosystem with short name {string}")
public void foundInfosystemHasShortName(String shortName) {
Assert.assertTrue("Infosystem with short name " + shortName + " not found", infosystemsPage.getFoundInfosystemsShortName().stream().anyMatch(shortName::equalsIgnoreCase));
}
}
package ee.ria.riha.loginpage;
import ee.ria.riha.driver.Setup;
import