Skip to content

Commit 9107ac1

Browse files
committed
Let the relative locator find the js executor like everyone else does
1 parent d0f7f7f commit 9107ac1

2 files changed

Lines changed: 5 additions & 20 deletions

File tree

java/client/src/org/openqa/selenium/By.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ public WebElement findElement(SearchContext context) {
135135
public abstract List<WebElement> findElements(SearchContext context);
136136

137137
protected WebDriver getWebDriver(SearchContext context) {
138+
if (context instanceof WebDriver) {
139+
return (WebDriver) context;
140+
}
141+
138142
if (!(context instanceof WrapsDriver)) {
139143
throw new IllegalArgumentException("Context does not wrap a webdriver: " + context);
140144
}

java/client/src/org/openqa/selenium/support/locators/RelativeLocator.java

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323
import org.openqa.selenium.By;
2424
import org.openqa.selenium.JavascriptExecutor;
2525
import org.openqa.selenium.SearchContext;
26-
import org.openqa.selenium.WebDriver;
2726
import org.openqa.selenium.WebElement;
28-
import org.openqa.selenium.WrapsDriver;
2927
import org.openqa.selenium.internal.Require;
3028
import org.openqa.selenium.json.Json;
3129
import org.openqa.selenium.json.JsonException;
@@ -205,7 +203,7 @@ private RelativeBy near(Object locator, int atMostDistanceInPixels) {
205203

206204
@Override
207205
public List<WebElement> findElements(SearchContext context) {
208-
JavascriptExecutor js = extractJsExecutor(context);
206+
JavascriptExecutor js = getJavascriptExecutor(context);
209207

210208
@SuppressWarnings("unchecked")
211209
List<WebElement> elements = (List<WebElement>) js.executeScript(FIND_ELEMENTS, asAtomLocatorParameter(this));
@@ -230,23 +228,6 @@ private List<Map<String, Object>> amend(Map<String, Object> toAdd) {
230228
.build();
231229
}
232230

233-
private JavascriptExecutor extractJsExecutor(SearchContext context) {
234-
if (context instanceof JavascriptExecutor) {
235-
return (JavascriptExecutor) context;
236-
}
237-
238-
Object current = context;
239-
while (current instanceof WrapsDriver) {
240-
WebDriver driver = ((WrapsDriver) context).getWrappedDriver();
241-
if (driver instanceof JavascriptExecutor) {
242-
return (JavascriptExecutor) driver;
243-
}
244-
current = driver;
245-
}
246-
247-
throw new IllegalArgumentException("Cannot find elements, since the context cannot execute JS: " + context);
248-
}
249-
250231
@Override
251232
public Parameters getRemoteParameters() {
252233
return new Parameters(

0 commit comments

Comments
 (0)