Skip to content

Commit

Permalink
Merge branch 'trunk' into isort-across-tests-dir
Browse files Browse the repository at this point in the history
  • Loading branch information
symonk authored Sep 5, 2022
2 parents 9482cad + fcc549a commit 82d7074
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 15 deletions.
6 changes: 2 additions & 4 deletions java/src/org/openqa/selenium/JavascriptExecutor.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,9 @@ public interface JavascriptExecutor {
* <p>
* The default timeout for a script to be executed is 0ms. In most cases, including the examples
* below, one must set the script timeout
* {@link WebDriver.Timeouts#setScriptTimeout(java.time.Duration)} beforehand
* {@link WebDriver.Timeouts#scriptTimeout(java.time.Duration)} beforehand
* to a value sufficiently large enough.
*
*
* <p>
* Example #1: Performing a sleep in the browser under test. <pre>{@code
* long start = System.currentTimeMillis();
Expand Down Expand Up @@ -141,11 +140,10 @@ public interface JavascriptExecutor {
* criteria. The arguments will be made available to the JavaScript via the "arguments"
* variable.
*
*
* @param script The JavaScript to execute.
* @param args The arguments to the script. May be empty.
* @return One of Boolean, Long, String, List, Map, WebElement, or null.
* @see WebDriver.Timeouts#setScriptTimeout(java.time.Duration)
* @see WebDriver.Timeouts#scriptTimeout(java.time.Duration)
*/
Object executeAsyncScript(String script, Object... args);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,11 @@ public EventFiringDecorator(WebDriverListener... listeners) {
this.listeners = Arrays.asList(listeners);
}

public EventFiringDecorator(Class<T> targetClass, WebDriverListener... listeners) {
super(targetClass);
this.listeners = Arrays.asList(listeners);
}

@Override
public void beforeCall(Decorated<?> target, Method method, Object[] args) {
listeners.forEach(listener -> fireBeforeEvents(listener, target, method, args));
Expand Down
1 change: 1 addition & 0 deletions java/test/org/openqa/selenium/WindowTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ public void testSetsTheSizeOfTheCurrentWindowFromIframe() {
}

@Test
@Ignore(value = FIREFOX, gitHubActions = true, issue = "https://github.com/mozilla/geckodriver/issues/2042")
public void testGetsThePositionOfTheCurrentWindow() {
// Window position is undefined on ANDROID (and most mobile platforms
// though others aren't defined in org.openqa.selenium.Platform).
Expand Down
1 change: 1 addition & 0 deletions java/test/org/openqa/selenium/support/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ java_test_suite(
srcs = glob(["*Test.java"]),
deps = [
"//java/src/org/openqa/selenium:core",
"//java/src/org/openqa/selenium/remote",
"//java/src/org/openqa/selenium/support",
"//java/test/org/openqa/selenium/support/ui:clock",
"//java/test/org/openqa/selenium/testing:annotations",
Expand Down
1 change: 1 addition & 0 deletions java/test/org/openqa/selenium/support/events/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ java_test_suite(
srcs = glob(["*.java"]),
deps = [
"//java/src/org/openqa/selenium:core",
"//java/src/org/openqa/selenium/remote",
"//java/src/org/openqa/selenium/support",
"//java/test/org/openqa/selenium:helpers",
"//java/test/org/openqa/selenium/testing:annotations",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@
import org.junit.jupiter.api.Tag;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.ImmutableCapabilities;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
Expand Down Expand Up @@ -81,7 +84,7 @@ public void afterGet(WebDriver driver, String url) {
acc.append("afterGet\n");
}
};
WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

decorated.get("http://example.com/");

Expand Down Expand Up @@ -134,7 +137,7 @@ public void afterClick(WebElement element) {
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

decorated.findElement(By.id("test")).click();

Expand Down Expand Up @@ -183,7 +186,7 @@ public void afterBack(WebDriver.Navigation navigation) {
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

decorated.navigate().back();

Expand Down Expand Up @@ -231,7 +234,7 @@ public void afterDismiss(Alert alert) {
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

decorated.switchTo().alert().dismiss();

Expand Down Expand Up @@ -273,7 +276,7 @@ public void afterExecuteScript(WebDriver driver, String script, Object[] args, O
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

((JavascriptExecutor) decorated).executeScript("sum", "2", "2");

Expand All @@ -297,7 +300,7 @@ public void beforeAnyCall(Object target, Method method, Object[] args) {
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

assertThatNoException().isThrownBy(decorated::getWindowHandle);
}
Expand Down Expand Up @@ -327,7 +330,7 @@ public void beforeGetWindowHandle(WebDriver driver) {
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

assertThatNoException().isThrownBy(decorated::getWindowHandle);
}
Expand All @@ -342,7 +345,7 @@ public void afterAnyCall(Object target, Method method, Object[] args, Object res
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

assertThatNoException().isThrownBy(decorated::getWindowHandle);
}
Expand All @@ -358,7 +361,7 @@ public void afterAnyWebDriverCall(WebDriver driver, Method method, Object[] args
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

assertThatNoException().isThrownBy(decorated::getWindowHandle);
}
Expand All @@ -373,7 +376,7 @@ public void afterGetWindowHandle(WebDriver driver, String result) {
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

assertThatNoException().isThrownBy(decorated::getWindowHandle);
}
Expand All @@ -389,7 +392,46 @@ public void onError(Object target, Method method, Object[] args, InvocationTarge
}
};

WebDriver decorated = new EventFiringDecorator(listener).decorate(driver);
WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver);

assertThatExceptionOfType(WebDriverException.class)
.isThrownBy(decorated::getWindowHandle);
}

@Test
void shouldBeAbleToDecorateAChildClassOfWebDriver() {
RemoteWebDriver driver = mock(RemoteWebDriver.class);
when(driver.getCapabilities()).thenReturn(new ImmutableCapabilities("browserName", "firefox"));

WebDriverListener listener = new WebDriverListener() {
@Override
public void onError(Object target, Method method, Object[] args, InvocationTargetException e) {
throw new RuntimeException("listener");
}
};

RemoteWebDriver decorated =
new EventFiringDecorator<>(RemoteWebDriver.class, listener).decorate(driver);

Capabilities caps = decorated.getCapabilities();

assertThat(caps.getBrowserName()).isEqualTo("firefox");
}

@Test
void shouldBeAbleToCallDecoratedMethodForDecoratedChildClass() {
RemoteWebDriver driver = mock(RemoteWebDriver.class);
when(driver.getWindowHandle()).thenThrow(new WebDriverException());

WebDriverListener listener = new WebDriverListener() {
@Override
public void onError(Object target, Method method, Object[] args, InvocationTargetException e) {
throw new RuntimeException("listener");
}
};

RemoteWebDriver decorated =
new EventFiringDecorator<>(RemoteWebDriver.class, listener).decorate(driver);

assertThatExceptionOfType(WebDriverException.class)
.isThrownBy(decorated::getWindowHandle);
Expand Down
1 change: 1 addition & 0 deletions py/test/selenium/webdriver/common/api_example_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ def test_is_element_displayed(driver, pages):

@pytest.mark.xfail_chrome
@pytest.mark.xfail_firefox(reason='https://github.com/mozilla/geckodriver/issues/2042')
@pytest.mark.xfail_remote(reason='https://github.com/mozilla/geckodriver/issues/2042')
def test_move_window_position(driver, pages):
pages.load("blank.html")
loc = driver.get_window_position()
Expand Down
3 changes: 3 additions & 0 deletions py/test/selenium/webdriver/common/window_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ def test_should_get_the_position_of_the_current_window(driver):
assert position.get('y') >= 0


@pytest.mark.xfail_firefox(reason='https://github.com/mozilla/geckodriver/issues/2042')
@pytest.mark.xfail_remote(reason='https://github.com/mozilla/geckodriver/issues/2042')
def test_should_set_the_position_of_the_current_window(driver):
position = driver.get_window_position()

Expand Down Expand Up @@ -91,6 +93,7 @@ def test_should_get_the_rect_of_the_current_window(driver):


@pytest.mark.xfail_firefox(reason='https://github.com/mozilla/geckodriver/issues/2042')
@pytest.mark.xfail_remote(reason='https://github.com/mozilla/geckodriver/issues/2042')
@pytest.mark.xfail_safari(raises=WebDriverException,
reason='Get Window Rect command not implemented')
def test_should_set_the_rect_of_the_current_window(driver):
Expand Down

0 comments on commit 82d7074

Please sign in to comment.