diff --git a/junit-tests/src/test/java/org/testmonkeys/TestConfiguration.java b/junit-tests/src/test/java/org/testmonkeys/TestConfiguration.java index 21ffd3a..3d34f55 100644 --- a/junit-tests/src/test/java/org/testmonkeys/TestConfiguration.java +++ b/junit-tests/src/test/java/org/testmonkeys/TestConfiguration.java @@ -1,15 +1,17 @@ package org.testmonkeys; import org.json.JSONObject; -import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.remote.DesiredCapabilities; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; import org.testmonkeys.maui.core.browser.Browser; -import org.testmonkeys.DriverFactory; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.util.Properties; import java.util.concurrent.TimeUnit; @@ -35,6 +37,7 @@ public Properties loadTestProperties() throws IOException { @Bean @Scope("prototype") + //@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) public Browser browser(@Value("${selenium.profile}") String seleniumProfile, @Value("${browser.profile}") String browserProfile ) throws Exception { if (seleniumProfile==null || seleniumProfile.isEmpty()){ diff --git a/junit-tests/src/test/java/org/testmonkeys/webpages/pageObjects/HtmlElementsPageObject.java b/junit-tests/src/test/java/org/testmonkeys/webpages/pageObjects/HtmlElementsPageObject.java index f3b6823..5069145 100644 --- a/junit-tests/src/test/java/org/testmonkeys/webpages/pageObjects/HtmlElementsPageObject.java +++ b/junit-tests/src/test/java/org/testmonkeys/webpages/pageObjects/HtmlElementsPageObject.java @@ -27,6 +27,9 @@ public class HtmlElementsPageObject extends AbstractPage { @ElementAccessor(elementName = "element5", byId = "hidden_input") private Input hiddenInput; + @ElementAccessor(elementName = "element13NonExisting", byId = "element13NonExisting") + private Input nonExistingInput; + public Input firstName() { return firstName; } @@ -50,4 +53,8 @@ public Input getNoDisplayInput() { public Input getHiddenInput() { return hiddenInput; } + + public Input getNonExistingInput() { + return nonExistingInput; + } } diff --git a/junit-tests/src/test/java/org/testmonkeys/webpages/tests/AbstractComponentTest.java b/junit-tests/src/test/java/org/testmonkeys/webpages/tests/AbstractComponentTest.java index 461cf72..d409fc8 100644 --- a/junit-tests/src/test/java/org/testmonkeys/webpages/tests/AbstractComponentTest.java +++ b/junit-tests/src/test/java/org/testmonkeys/webpages/tests/AbstractComponentTest.java @@ -2,18 +2,14 @@ import com.automation.remarks.junit.VideoRule; import org.junit.After; -import org.junit.AfterClass; import org.junit.Rule; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; -import org.testmonkeys.DriverFactory; import org.testmonkeys.TestConfiguration; import org.testmonkeys.maui.core.browser.Browser; -import java.sql.Driver; - @RunWith(SpringRunner.class) @ContextConfiguration(classes = TestConfiguration.class) abstract public class AbstractComponentTest { @@ -28,8 +24,8 @@ public void cleanup() { browser.quit(); } - @AfterClass - public static void cleanupClass() { - DriverFactory.stopLocals(); - } +// @After +// public static void cleanupClass() { +// DriverFactory.stopLocals(); +// } } diff --git a/junit-tests/src/test/java/org/testmonkeys/webpages/tests/elements/ComponentTest.java b/junit-tests/src/test/java/org/testmonkeys/webpages/tests/elements/ComponentTest.java index 1fa0100..0a95e4d 100644 --- a/junit-tests/src/test/java/org/testmonkeys/webpages/tests/elements/ComponentTest.java +++ b/junit-tests/src/test/java/org/testmonkeys/webpages/tests/elements/ComponentTest.java @@ -1,8 +1,12 @@ package org.testmonkeys.webpages.tests.elements; +import org.hamcrest.Matchers; import org.junit.Test; import org.testmonkeys.webpages.tests.AbstractHtmlElementPageTest; +import java.time.Duration; +import java.time.Instant; + import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; @@ -32,4 +36,14 @@ public void isDisplayed_false_hidden() { public void isDisplayed_true() { assertThat("first name2 displayed", page.firstName2().isDisplayed(), is(true)); } + + @Test + public void isDisplayed_elementNotPresent() { + Instant start = Instant.now(); + assertThat("element not present is displayed", page.getNonExistingInput().isDisplayed(), is(false)); + Instant end = Instant.now(); + Duration executedDuration = Duration.between(start, end); + System.out.println(executedDuration); + assertThat("search was more or less instant", executedDuration.getSeconds(), Matchers.lessThan(2l)); + } } diff --git a/maui/src/main/java/org/testmonkeys/maui/core/browser/Browser.java b/maui/src/main/java/org/testmonkeys/maui/core/browser/Browser.java index 4f1fda0..0c9eec8 100644 --- a/maui/src/main/java/org/testmonkeys/maui/core/browser/Browser.java +++ b/maui/src/main/java/org/testmonkeys/maui/core/browser/Browser.java @@ -59,6 +59,11 @@ public List findElements(Locator locator) { return dynamicWaiter.until(webDriver -> webDriver.findElements(locator.getSeleniumLocator())); } + @Override + public WebElement instantFind(Locator locator) { + return driver.findElement(locator.getSeleniumLocator()); + } + private FluentWait initWaitter(int timeout, int step, TimeUnit unit) { return new FluentWait<>(this.driver) .withTimeout(timeout, unit) diff --git a/maui/src/main/java/org/testmonkeys/maui/core/elements/Component.java b/maui/src/main/java/org/testmonkeys/maui/core/elements/Component.java index a7693fd..65f92ea 100644 --- a/maui/src/main/java/org/testmonkeys/maui/core/elements/Component.java +++ b/maui/src/main/java/org/testmonkeys/maui/core/elements/Component.java @@ -19,6 +19,8 @@ public interface Component extends LocatesElements { WebElement find(); + WebElement instantFind(); + Browser getBrowser(); void setBrowser(Browser browser); diff --git a/maui/src/main/java/org/testmonkeys/maui/core/elements/location/LocatesElements.java b/maui/src/main/java/org/testmonkeys/maui/core/elements/location/LocatesElements.java index 0e1e8c5..b7c9035 100644 --- a/maui/src/main/java/org/testmonkeys/maui/core/elements/location/LocatesElements.java +++ b/maui/src/main/java/org/testmonkeys/maui/core/elements/location/LocatesElements.java @@ -11,4 +11,6 @@ public interface LocatesElements { WebElement findElement(Locator locator); List findElements(Locator locator); + + WebElement instantFind(Locator locator); } diff --git a/maui/src/main/java/org/testmonkeys/maui/pageobjects/AbstractPage.java b/maui/src/main/java/org/testmonkeys/maui/pageobjects/AbstractPage.java index 43d2868..cc7d379 100644 --- a/maui/src/main/java/org/testmonkeys/maui/pageobjects/AbstractPage.java +++ b/maui/src/main/java/org/testmonkeys/maui/pageobjects/AbstractPage.java @@ -65,6 +65,11 @@ public WebElement findElement(Locator locator) { return browser.findElement(locator); } + @Override + public WebElement instantFind(Locator locator) { + return browser.instantFind(locator); + } + @Override public List findElements(Locator locator) { return browser.findElements(locator); diff --git a/maui/src/main/java/org/testmonkeys/maui/pageobjects/elements/AbstractComponent.java b/maui/src/main/java/org/testmonkeys/maui/pageobjects/elements/AbstractComponent.java index 966ff0a..e31cb9d 100644 --- a/maui/src/main/java/org/testmonkeys/maui/pageobjects/elements/AbstractComponent.java +++ b/maui/src/main/java/org/testmonkeys/maui/pageobjects/elements/AbstractComponent.java @@ -69,6 +69,21 @@ public void setParent(LocatesElements parent) { this.parent = parent; } + @Override + public WebElement instantFind() { + if (parent == null) + webElement = browser.instantFind(locator); + else { + webElement = parent.instantFind(locator); + } + return webElement; + } + + @Override + public WebElement instantFind(Locator locator) { + return instantFind().findElement(locator.getSeleniumLocator()); + } + @Override public WebElement find() { if (webElement != null && isAlive(webElement)) { @@ -153,7 +168,7 @@ public String toString() { @Override public boolean isDisplayed() { try { - return find().isDisplayed(); + return instantFind().isDisplayed(); } catch (Exception e) { return false; }