Skip to content

Commit 98161bc

Browse files
committed
java: Making frame switching API more standard conformant. The standard claims that a driver must provide switching by index or element reference only. Switching by name and id should be implemented on the client side if we want to keep it in the API. In particular it is true for marionette
1 parent 6654610 commit 98161bc

File tree

6 files changed

+14
-24
lines changed

6 files changed

+14
-24
lines changed

java/client/src/org/openqa/selenium/remote/RemoteWebDriver.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.openqa.selenium.Dimension;
3232
import org.openqa.selenium.HasCapabilities;
3333
import org.openqa.selenium.JavascriptExecutor;
34+
import org.openqa.selenium.NoSuchElementException;
35+
import org.openqa.selenium.NoSuchFrameException;
3436
import org.openqa.selenium.OutputType;
3537
import org.openqa.selenium.Platform;
3638
import org.openqa.selenium.Point;
@@ -871,8 +873,17 @@ public WebDriver frame(int frameIndex) {
871873
}
872874

873875
public WebDriver frame(String frameName) {
874-
execute(DriverCommand.SWITCH_TO_FRAME, ImmutableMap.of("id", frameName));
875-
return RemoteWebDriver.this;
876+
String name = frameName.replaceAll("(['\"\\\\#.:;,!?+<>=~*^$|%&@`{}\\-/\\[\\]\\(\\)])", "\\\\$1");
877+
List<WebElement> frameElements = RemoteWebDriver.this.findElements(
878+
By.cssSelector("frame[name='" + name + "'],iframe[name='" + name + "']"));
879+
if (frameElements.size() == 0) {
880+
frameElements = RemoteWebDriver.this.findElements(
881+
By.cssSelector("frame#" + name + ",iframe#" + name));
882+
}
883+
if (frameElements.size() == 0) {
884+
throw new NoSuchFrameException("No frame element found by name or id " + frameName);
885+
}
886+
return frame(frameElements.get(0));
876887
}
877888

878889
public WebDriver frame(WebElement frameElement) {

java/client/test/org/openqa/selenium/ClickTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ public void testCanClickOnAnAnchorAndNotReloadThePage() {
8585
assertEquals("Latch was reset", Boolean.TRUE, samePage);
8686
}
8787

88-
@Ignore(value = {MARIONETTE})
8988
@Test
9089
public void testCanClickOnALinkThatUpdatesAnotherFrame() {
9190
driver.switchTo().frame("source");
@@ -97,7 +96,6 @@ public void testCanClickOnALinkThatUpdatesAnotherFrame() {
9796
}
9897

9998
@JavascriptEnabled
100-
@Ignore(value = {MARIONETTE})
10199
@Test
102100
public void testElementsFoundByJsCanLoadUpdatesInAnotherFrame() {
103101
driver.switchTo().frame("source");
@@ -112,7 +110,6 @@ public void testElementsFoundByJsCanLoadUpdatesInAnotherFrame() {
112110
}
113111

114112
@JavascriptEnabled
115-
@Ignore(value = {MARIONETTE})
116113
@Test
117114
public void testJsLocatedElementsCanUpdateFramesIfFoundSomehowElse() {
118115
driver.switchTo().frame("source");

java/client/test/org/openqa/selenium/ElementEqualityTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ public void testSameElementLookedUpDifferentWaysUsingFindElementsShouldHaveSameH
7171
}
7272

7373
@JavascriptEnabled
74-
@Ignore(value = {MARIONETTE})
7574
@Test
7675
public void testAnElementFoundInADifferentFrameViaJsShouldHaveSameId() {
7776
driver.get(pages.missedJsReferencePage);

java/client/test/org/openqa/selenium/ElementFindingTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,6 @@ public void testShouldNotBeAbleToLocateASingleElementOnABlankPage() {
739739
driver.findElement(By.id("nonExistantButton"));
740740
}
741741

742-
@Ignore(value = {MARIONETTE})
743742
@Test
744743
public void testAnElementFoundInADifferentFrameIsStale() {
745744
driver.get(pages.missedJsReferencePage);
@@ -755,7 +754,6 @@ public void testAnElementFoundInADifferentFrameIsStale() {
755754
}
756755

757756
@JavascriptEnabled
758-
@Ignore({MARIONETTE})
759757
@Test
760758
public void testAnElementFoundInADifferentFrameViaJsCanBeUsed() {
761759
driver.get(pages.missedJsReferencePage);

java/client/test/org/openqa/selenium/ExecutingJavascriptTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,6 @@ public void testShouldBeAbleToPassInMoreThanOneArgument() {
424424

425425
@JavascriptEnabled
426426
@Test
427-
@Ignore({MARIONETTE})
428427
public void testShouldBeAbleToGrabTheBodyOfFrameOnceSwitchedTo() {
429428
driver.get(pages.richTextPage);
430429

java/client/test/org/openqa/selenium/FrameSwitchingTest.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ public void testShouldBeAbleToSwitchToAnIframeByItsIndex() {
113113
}
114114

115115
@Test
116-
@Ignore(MARIONETTE)
117116
public void testShouldBeAbleToSwitchToAFrameByItsName() {
118117
driver.get(pages.framesetPage);
119118
driver.switchTo().frame("fourth");
@@ -122,7 +121,6 @@ public void testShouldBeAbleToSwitchToAFrameByItsName() {
122121
}
123122

124123
@Test
125-
@Ignore(MARIONETTE)
126124
public void testShouldBeAbleToSwitchToAnIframeByItsName() {
127125
driver.get(pages.iframePage);
128126
driver.switchTo().frame("iframe1-name");
@@ -131,23 +129,20 @@ public void testShouldBeAbleToSwitchToAnIframeByItsName() {
131129
}
132130

133131
@Test
134-
@Ignore(MARIONETTE)
135132
public void testShouldBeAbleToSwitchToAFrameByItsID() {
136133
driver.get(pages.framesetPage);
137134
driver.switchTo().frame("fifth");
138135
assertThat(driver.findElement(By.name("windowOne")).getText(), equalTo("Open new window"));
139136
}
140137

141138
@Test
142-
@Ignore(MARIONETTE)
143139
public void testShouldBeAbleToSwitchToAnIframeByItsID() {
144140
driver.get(pages.iframePage);
145141
driver.switchTo().frame("iframe1");
146142

147143
assertThat(driver.findElement(By.name("id-name1")).getAttribute("value"), equalTo("name"));
148144
}
149145

150-
@Ignore({MARIONETTE})
151146
@Test
152147
public void testShouldBeAbleToSwitchToFrameWithNameContainingDot() {
153148
driver.get(pages.framesetPage);
@@ -187,7 +182,6 @@ public void testShouldEnsureElementIsAFrameBeforeSwitching() {
187182
}
188183
}
189184

190-
@Ignore({MARIONETTE})
191185
@Test
192186
public void testFrameSearchesShouldBeRelativeToTheCurrentlySelectedFrame() {
193187
driver.get(pages.framesetPage);
@@ -217,7 +211,6 @@ public void testFrameSearchesShouldBeRelativeToTheCurrentlySelectedFrame() {
217211
assertThat(driver.findElement(By.id("pageNumber")).getText(), equalTo("2"));
218212
}
219213

220-
@Ignore({MARIONETTE})
221214
@Test
222215
public void testShouldSelectChildFramesByChainedCalls() {
223216
driver.get(pages.framesetPage);
@@ -226,7 +219,6 @@ public void testShouldSelectChildFramesByChainedCalls() {
226219
assertThat(driver.findElement(By.id("pageNumber")).getText(), equalTo("11"));
227220
}
228221

229-
@Ignore({MARIONETTE})
230222
@Test
231223
public void testShouldThrowFrameNotFoundExceptionLookingUpSubFramesWithSuperFrameNames() {
232224
driver.get(pages.framesetPage);
@@ -365,7 +357,6 @@ public String getTextOfGreetingElement() {
365357
return wait.until(presenceOfElementLocated(By.id("greeting"))).getText();
366358
}
367359

368-
@Ignore({MARIONETTE})
369360
@Test
370361
public void testShouldBeAbleToClickInAFrame() {
371362
driver.get(pages.framesetPage);
@@ -380,7 +371,6 @@ public void testShouldBeAbleToClickInAFrame() {
380371
assertThat(getTextOfGreetingElement(), equalTo("Success!"));
381372
}
382373

383-
@Ignore({MARIONETTE})
384374
@JavascriptEnabled
385375
@Test
386376
public void testShouldBeAbleToClickInAFrameThatRewritesTopWindowLocation() {
@@ -391,7 +381,6 @@ public void testShouldBeAbleToClickInAFrameThatRewritesTopWindowLocation() {
391381
wait.until(titleIs("Target page for issue 5237"));
392382
}
393383

394-
@Ignore({MARIONETTE})
395384
@Test
396385
public void testShouldBeAbleToClickInASubFrame() {
397386
driver.get(pages.framesetPage);
@@ -409,7 +398,6 @@ public void testShouldBeAbleToClickInASubFrame() {
409398
assertThat(driver.findElement(By.id("greeting")).getText(), equalTo("Success!"));
410399
}
411400

412-
@Ignore(MARIONETTE)
413401
@Test
414402
public void testShouldBeAbleToFindElementsInIframesByXPath() {
415403
driver.get(pages.iframePage);
@@ -440,7 +428,7 @@ public void testGetCurrentUrl() {
440428
assertThat(driver.getCurrentUrl(), equalTo(url));
441429
}
442430

443-
@Ignore(value = {PHANTOMJS, MARIONETTE})
431+
@Ignore(value = {PHANTOMJS})
444432
@JavascriptEnabled
445433
@Test
446434
public void testShouldBeAbleToSwitchToTheTopIfTheFrameIsDeletedFromUnderUs() {
@@ -486,14 +474,12 @@ public void testShouldNotBeAbleToDoAnythingTheFrameIsDeletedFromUnderUs() {
486474
}
487475

488476
@Test
489-
@Ignore(MARIONETTE)
490477
public void testShouldReturnWindowTitleInAFrameset() {
491478
driver.get(pages.framesetPage);
492479
driver.switchTo().frame("third");
493480
assertEquals("Unique title", driver.getTitle());
494481
}
495482

496-
@Ignore(MARIONETTE)
497483
@JavascriptEnabled
498484
@Test
499485
public void testJavaScriptShouldExecuteInTheContextOfTheCurrentFrame() {

0 commit comments

Comments
 (0)