package com.codeborne.selenide; import com.codeborne.selenide.impl.WebDriverThreadLocalContainer; import com.codeborne.selenide.rules.MockWebdriverContainer; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriver.Navigation; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.events.WebDriverEventListener; import java.net.URL; import static com.codeborne.selenide.Selenide.open; import static com.codeborne.selenide.WebDriverRunner.FIREFOX; import static com.codeborne.selenide.WebDriverRunner.HTMLUNIT; import static java.lang.Thread.currentThread; import static org.junit.Assert.assertSame; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; public class WebDriverRunnerTest { static WebDriver driver; @Rule public MockWebdriverContainer mockWebdriverContainer = new MockWebdriverContainer(); URL url = currentThread().getContextClassLoader().getResource("start_page.html"); @Before public void resetWebDriverContainer() { driver = mock(RemoteWebDriver.class, RETURNS_DEEP_STUBS); doReturn(mock(Navigation.class)).when(driver).navigate(); WebDriverRunner.webdriverContainer = spy(new WebDriverThreadLocalContainer()); doReturn(null).when((JavascriptExecutor) driver).executeScript(anyString(), any()); } @After public void resetSettings() { WebDriverRunner.closeWebDriver(); driver = null; Configuration.browser = System.getProperty("browser", FIREFOX); } @Test public void allowsToSpecifyCustomWebDriverConfiguration() { WebDriverRunner.closeWebDriver(); Configuration.browser = "com.codeborne.selenide.WebDriverRunnerTest$CustomWebDriverProvider"; assertSame(driver, WebDriverRunner.getWebDriver()); } @Test public void allowsToSpecifyCustomWebDriverProgrammatically() { RemoteWebDriver myDriver = mock(RemoteWebDriver.class); doReturn(mock(Navigation.class)).when(myDriver).navigate(); WebDriverRunner.setWebDriver(myDriver); open(url); assertSame(myDriver, WebDriverRunner.getWebDriver()); } @Test public void userCanAddWebDriverListeners() { WebDriverEventListener listener1 = mock(WebDriverEventListener.class); WebDriverRunner.addListener(listener1); Configuration.browser = HTMLUNIT; open(url); verify(listener1).beforeNavigateTo(eq(url.toString()), any(WebDriver.class)); } public static class CustomWebDriverProvider implements WebDriverProvider { @Override public WebDriver createDriver(DesiredCapabilities desiredCapabilities) { return driver; } } }