[WIP] Replace FluentLenium with Selenide by mkurz · Pull Request #13566 · playframework/playframework
Expand Up
@@ -4,21 +4,25 @@
package play.test;
import io.fluentlenium.adapter.FluentAdapter; import com.codeborne.selenide.SelenideConfig; import com.codeborne.selenide.SelenideDriver; import com.codeborne.selenide.SelenideElement; import java.time.Duration; import java.util.function.Function; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.ui.FluentWait;
/** * A test browser (Using Selenium WebDriver) with the FluentLenium API * (https://github.com/Fluentlenium/FluentLenium). * A test browser (Using Selenium WebDriver) with the Selenide API * (https://github.com/selenide/selenide). */ public class TestBrowser extends FluentAdapter { public class TestBrowser {
private SelenideDriver driver;
/** * A test browser (Using Selenium WebDriver) with the FluentLenium API * (https://github.com/Fluentlenium/FluentLenium). * A test browser (Using Selenium WebDriver) with the Selenide API * (https://github.com/selenide/selenide). * * @param webDriver The WebDriver instance to use. * @param baseUrl The base url to use for relative requests. Expand All @@ -29,15 +33,45 @@ public TestBrowser(Class<? extends WebDriver> webDriver, String baseUrl) throws }
/** * A test browser (Using Selenium WebDriver) with the FluentLenium API * (https://github.com/Fluentlenium/FluentLenium). * A test browser (Using Selenium WebDriver) with the Selenide API * (https://github.com/selenide/selenide). * * @param webDriver The WebDriver instance to use. * @param baseUrl The base url to use for relative requests. */ public TestBrowser(WebDriver webDriver, String baseUrl) { super.initFluent(webDriver); super.getConfiguration().setBaseUrl(baseUrl); SelenideConfig config = new SelenideConfig(); config.baseUrl(baseUrl); driver = new SelenideDriver(config, webDriver, null); }
public void open(String relativeOrAbsoluteUrl) { driver.open(relativeOrAbsoluteUrl); }
public void goTo(String relativeOrAbsoluteUrl) { open(relativeOrAbsoluteUrl); }
public String source() { return driver.source(); }
public String pageSource() { return source(); }
public SelenideElement el(String cssSelector) { return driver.find(cssSelector); }
public SelenideElement $(String cssSelector) { return el(cssSelector); }
public String url() { // return the relative url return driver.url().substring(driver.config().baseUrl().length() + 1); }
/** Expand All @@ -46,17 +80,14 @@ public TestBrowser(WebDriver webDriver, String baseUrl) { * @return the webdriver contained in a fluent wait. */ public FluentWait<WebDriver> fluentWait() { return new FluentWait<>(super.getDriver()); return new FluentWait<>(driver.getWebDriver()); }
/** * Repeatedly applies this instance's input value to the given function until one of the following * occurs: the function returns neither null nor false, the function throws an unignored * exception, the timeout expires * * <p>Useful in situations where FluentAdapter#await is too specific (for example to check against * page source) * * @param <T> the return type * @param wait generic {@code FluentWait<WebDriver>} instance * @param f function to execute Expand All @@ -76,9 +107,6 @@ public <T> T waitUntil(FluentWait<WebDriver> wait, Function<WebDriver, T> f) { * <li>the default timeout expires * </ul> * * useful in situations where FluentAdapter#await is too specific (for example to check against * page source or title) * * @param f function to execute * @param <T> the return type * @return the return value. Expand All @@ -95,14 +123,16 @@ public <T> T waitUntil(Function<WebDriver, T> f) { * @return the web driver options. */ public WebDriver.Options manage() { return super.getDriver().manage(); return driver.getWebDriver().manage(); }
/** Quits and releases the {@link WebDriver} */ void quit() { if (getDriver() != null) { getDriver().quit(); // TODO siehe dprecation comment in WebDriverRunner.closeWebDriver final WebDriver webDriver = driver.getWebDriver(); if (webDriver != null) { webDriver.quit(); } releaseFluent(); // releaseFluent(); } }
package play.test;
import io.fluentlenium.adapter.FluentAdapter; import com.codeborne.selenide.SelenideConfig; import com.codeborne.selenide.SelenideDriver; import com.codeborne.selenide.SelenideElement; import java.time.Duration; import java.util.function.Function; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.ui.FluentWait;
/** * A test browser (Using Selenium WebDriver) with the FluentLenium API * (https://github.com/Fluentlenium/FluentLenium). * A test browser (Using Selenium WebDriver) with the Selenide API * (https://github.com/selenide/selenide). */ public class TestBrowser extends FluentAdapter { public class TestBrowser {
private SelenideDriver driver;
/** * A test browser (Using Selenium WebDriver) with the FluentLenium API * (https://github.com/Fluentlenium/FluentLenium). * A test browser (Using Selenium WebDriver) with the Selenide API * (https://github.com/selenide/selenide). * * @param webDriver The WebDriver instance to use. * @param baseUrl The base url to use for relative requests. Expand All @@ -29,15 +33,45 @@ public TestBrowser(Class<? extends WebDriver> webDriver, String baseUrl) throws }
/** * A test browser (Using Selenium WebDriver) with the FluentLenium API * (https://github.com/Fluentlenium/FluentLenium). * A test browser (Using Selenium WebDriver) with the Selenide API * (https://github.com/selenide/selenide). * * @param webDriver The WebDriver instance to use. * @param baseUrl The base url to use for relative requests. */ public TestBrowser(WebDriver webDriver, String baseUrl) { super.initFluent(webDriver); super.getConfiguration().setBaseUrl(baseUrl); SelenideConfig config = new SelenideConfig(); config.baseUrl(baseUrl); driver = new SelenideDriver(config, webDriver, null); }
public void open(String relativeOrAbsoluteUrl) { driver.open(relativeOrAbsoluteUrl); }
public void goTo(String relativeOrAbsoluteUrl) { open(relativeOrAbsoluteUrl); }
public String source() { return driver.source(); }
public String pageSource() { return source(); }
public SelenideElement el(String cssSelector) { return driver.find(cssSelector); }
public SelenideElement $(String cssSelector) { return el(cssSelector); }
public String url() { // return the relative url return driver.url().substring(driver.config().baseUrl().length() + 1); }
/** Expand All @@ -46,17 +80,14 @@ public TestBrowser(WebDriver webDriver, String baseUrl) { * @return the webdriver contained in a fluent wait. */ public FluentWait<WebDriver> fluentWait() { return new FluentWait<>(super.getDriver()); return new FluentWait<>(driver.getWebDriver()); }
/** * Repeatedly applies this instance's input value to the given function until one of the following * occurs: the function returns neither null nor false, the function throws an unignored * exception, the timeout expires * * <p>Useful in situations where FluentAdapter#await is too specific (for example to check against * page source) * * @param <T> the return type * @param wait generic {@code FluentWait<WebDriver>} instance * @param f function to execute Expand All @@ -76,9 +107,6 @@ public <T> T waitUntil(FluentWait<WebDriver> wait, Function<WebDriver, T> f) { * <li>the default timeout expires * </ul> * * useful in situations where FluentAdapter#await is too specific (for example to check against * page source or title) * * @param f function to execute * @param <T> the return type * @return the return value. Expand All @@ -95,14 +123,16 @@ public <T> T waitUntil(Function<WebDriver, T> f) { * @return the web driver options. */ public WebDriver.Options manage() { return super.getDriver().manage(); return driver.getWebDriver().manage(); }
/** Quits and releases the {@link WebDriver} */ void quit() { if (getDriver() != null) { getDriver().quit(); // TODO siehe dprecation comment in WebDriverRunner.closeWebDriver final WebDriver webDriver = driver.getWebDriver(); if (webDriver != null) { webDriver.quit(); } releaseFluent(); // releaseFluent(); } }