package com.autonomy.abc.selenium.find.results; import com.google.common.base.Function; import com.hp.autonomy.frontend.selenium.util.AppPage; import com.hp.autonomy.frontend.selenium.util.ParametrizedFactory; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.WebDriverWait; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class SimilarDocumentsView implements AppPage { private static final int SIMILAR_DOCUMENTS_TIMEOUT = 20; private final WebDriver driver; private final WebElement container; private SimilarDocumentsView(final WebDriver driver) { this.driver = driver; container = driver.findElement(By.className("suggest-service-view-container")); } public WebElement backButton() { return findElement(By.xpath("//button[contains(text(),'Back to search')]")); } public WebElement seedLink() { return title().findElement(By.tagName("a")); } private WebElement title() { if (resultsMessageContainerExists()) { return findElement(By.cssSelector(".results-message-container h4")); } return findElement(By.tagName("h1")); } private Boolean resultsMessageContainerExists() { return !findElements(By.cssSelector(".results-message-container h4")).isEmpty(); } public String getTitle() { return title().getText(); } public WebElement loadingIndicator() { return findElement(By.className("view-server-loading-indicator")); } public WebElement previewContents() { return findElement(By.className("preview-mode-container")); } /** * Y in 'X to Y of Z' */ public int getVisibleResultsCount() { return Integer.valueOf(findElement(By.className("current-results-number")).getText()); } public int getTotalResults() { return Integer.valueOf(findElement(By.className("total-results-number")).getText()); } public List<FindResult> getResults() { final List<FindResult> results = new ArrayList<>(); for (final WebElement result : findElements(By.className("main-results-container"))) { results.add(new FindResult(result, driver)); } return results; } public List<FindResult> getResults(final int maxResults) { final List<FindResult> results = getResults(); return results.subList(0, Math.min(maxResults, results.size())); } public FindResult getResult(final int i) { return new FindResult(findElement(By.cssSelector(".main-results-container:nth-of-type(" + i + ')')), driver); } @Override public void waitForLoad() { new WebDriverWait(driver, SIMILAR_DOCUMENTS_TIMEOUT) .withMessage("loading similar results view") .until((Function<? super WebDriver, Boolean>) webDriver -> findElement(By.cssSelector(".main-results-list.results")).isDisplayed() || findElement(By.cssSelector(".results-view-error")).isDisplayed()); } private WebElement findElement(final By locator) { return container.findElement(locator); } private Collection<WebElement> findElements(final By locator) { return container.findElements(locator); } public WebElement mainResultsContent() { return findElement(By.className("main-results-content")); } public void sortByDate() { sortBy(1); } @SuppressWarnings("SameParameterValue") private void sortBy(final int dropdownRow) { findElement(By.className("current-search-sort")).click(); findElement(By.cssSelector(".search-results-sort li:nth-child(" + dropdownRow + ')')).click(); } public static class Factory implements ParametrizedFactory<WebDriver, SimilarDocumentsView> { @Override public SimilarDocumentsView create(final WebDriver context) { return new SimilarDocumentsView(context); } } }