package com.tyndalehouse.step.e2e.fragments; import static com.tyndalehouse.step.e2e.framework.WebDriverUtils.selectAll; import static org.junit.Assert.assertEquals; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.WebDriverWait; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Predicate; public class Passage { private static final Logger LOGGER = LoggerFactory.getLogger(Passage.class); private final String reference; private final WebDriver driver; private final String version; private WebElement refElement; private WebElement versionElement; private final int passageId; /** * @param driver web driver * @param version version * @param reference ref */ public Passage(final WebDriver driver, final String version, final String reference, final int passageId) { this.driver = driver; this.version = version; this.reference = reference; this.passageId = passageId; } public void execute() { if(this.passageId == 1) { //check we aren't in the single view, and if so, definitely open up the other view. MenuOperations.clickMenuItem(this, "View", "Two panel view", 0); } this.refElement = findWithinPassage(".passageReference"); selectAll(this.refElement); this.refElement.sendKeys(this.reference, Keys.TAB); this.versionElement = findWithinPassage(".passageVersion"); selectAll(this.versionElement); final WebElement desiredVersion = this.driver.findElement(By.xpath("//*[@initials='" + this.version +"']")); // WebDriverWait wait = new WebDriverWait(this.driver, 5); // wait.until(new Predicate<WebDriver>(){ // // @Override // public boolean apply(final org.openqa.selenium.WebDriver webDriver) { // return desiredVersion.isDisplayed(); // } // }); this.versionElement.sendKeys(this.version); desiredVersion.click(); //focus on other box this.refElement.sendKeys(""); } public String checkPassageText(final String text) { final WebDriverWait w = new WebDriverWait(this.driver, 5); // final WebElement passageText = findWithinPassage(".passageContainer"); w.until(new Predicate<WebDriver>() { @Override public boolean apply(final WebDriver input) { final String webText = findWithinPassage(".passageContent").getText(); LOGGER.trace("Passage currently reads [{}]", webText); return webText.contains(text); } }); return findWithinPassage(".passageContent").getText(); } public String checkPassageTextDisappeared(final String text) { final WebDriverWait w = new WebDriverWait(this.driver, 5); final WebElement passageText = findWithinPassage(".passageText"); w.until(new Predicate<WebDriver>() { @Override public boolean apply(final WebDriver input) { final String webText = passageText.getText(); LOGGER.trace("Passage currently reads [{}]", webText); return !webText.contains(text); } }); return passageText.getText(); } public void checkReference() { checkReference(this.reference); } public void checkReference(final String reference) { final WebDriverWait w = new WebDriverWait(this.driver, 5); w.until(new Predicate<WebDriver>() { @Override public boolean apply(final WebDriver input) { return Passage.this.refElement.getAttribute("value").equals(reference); } }); } public WebElement findWithinPassage(final String css) { return this.driver.findElements(By.cssSelector(".passageContainer")).get(this.passageId) .findElement(By.cssSelector(css)); } public void verify() { checkReference(); assertEquals(this.version, this.versionElement.getAttribute("value")); } /** * @return the passageId */ public int getPassageId() { return this.passageId; } /** * @return the driver */ public WebDriver getDriver() { return this.driver; } }