From eaa30a52acfdeb21f4309e9ad4638954667211be Mon Sep 17 00:00:00 2001 From: Alexei Barantsev Date: Mon, 10 Dec 2012 22:18:42 +0000 Subject: [PATCH] AlexeiBarantsev: Fixing openWindow in WebDriverBackedSelenium to allow opening relative URLs r18293 --- .../selenium/WebDriverCommandProcessor.java | 2 +- .../seleniumemulation/OpenWindow.java | 25 ++++++++++++++++--- .../selenium/WebDriverSeleniumTestSuite.java | 3 ++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/java/client/src/org/openqa/selenium/WebDriverCommandProcessor.java b/java/client/src/org/openqa/selenium/WebDriverCommandProcessor.java index 75e286edebbec..6ef7a61e11e9a 100644 --- a/java/client/src/org/openqa/selenium/WebDriverCommandProcessor.java +++ b/java/client/src/org/openqa/selenium/WebDriverCommandProcessor.java @@ -280,7 +280,7 @@ private void setUpMethodMap() { seleneseMethods.put("mouseUp", new MouseEvent(elementFinder, javascriptLibrary, "mouseup")); seleneseMethods.put("mouseUpAt", new MouseEventAt(elementFinder, javascriptLibrary, "mouseup")); seleneseMethods.put("open", new Open(baseUrl)); - seleneseMethods.put("openWindow", new OpenWindow(new GetEval(scriptMutator))); + seleneseMethods.put("openWindow", new OpenWindow(baseUrl, new GetEval(scriptMutator))); seleneseMethods.put("refresh", new Refresh()); seleneseMethods.put("removeAllSelections", new RemoveAllSelections(elementFinder)); seleneseMethods.put("removeSelection", new RemoveSelection(javascriptLibrary, elementFinder)); diff --git a/java/client/src/org/openqa/selenium/internal/seleniumemulation/OpenWindow.java b/java/client/src/org/openqa/selenium/internal/seleniumemulation/OpenWindow.java index d3dc1ae8c923a..907ba891551d2 100644 --- a/java/client/src/org/openqa/selenium/internal/seleniumemulation/OpenWindow.java +++ b/java/client/src/org/openqa/selenium/internal/seleniumemulation/OpenWindow.java @@ -16,21 +16,40 @@ package org.openqa.selenium.internal.seleniumemulation; +import java.net.MalformedURLException; +import java.net.URL; + import org.openqa.selenium.WebDriver; +import com.thoughtworks.selenium.SeleniumException; + public class OpenWindow extends SeleneseCommand { + private final URL baseUrl; private final GetEval opener; - public OpenWindow(GetEval opener) { + public OpenWindow(String baseUrl, GetEval opener) { + try { + this.baseUrl = new URL(baseUrl); + } catch (MalformedURLException e) { + throw new SeleniumException(e.getMessage(), e); + } this.opener = opener; } @Override protected Void handleSeleneseCommand(final WebDriver driver, final String url, final String windowID) { - String[] args = {String.format("window.open('%s', '%s'); null;", url, windowID)}; + try { + final String urlToOpen = url.indexOf("://") == -1 ? + new URL(baseUrl, url).toString() : + url; + + String[] args = {String.format("window.open('%s', '%s'); null;", urlToOpen, windowID)}; - opener.apply(driver, args); + opener.apply(driver, args); + } catch (MalformedURLException e) { + throw new SeleniumException(e.getMessage(), e); + } return null; } diff --git a/java/client/test/com/thoughtworks/selenium/WebDriverSeleniumTestSuite.java b/java/client/test/com/thoughtworks/selenium/WebDriverSeleniumTestSuite.java index f0da97e0ed991..a56db863d14d5 100644 --- a/java/client/test/com/thoughtworks/selenium/WebDriverSeleniumTestSuite.java +++ b/java/client/test/com/thoughtworks/selenium/WebDriverSeleniumTestSuite.java @@ -38,6 +38,7 @@ import com.thoughtworks.selenium.corebased.TestFailingVerifications; import com.thoughtworks.selenium.corebased.TestFramesClick; import com.thoughtworks.selenium.corebased.TestFramesOpen; +import com.thoughtworks.selenium.corebased.TestFramesSpecialTargets; import com.thoughtworks.selenium.corebased.TestFunkEventHandling; import com.thoughtworks.selenium.corebased.TestGet; import com.thoughtworks.selenium.corebased.TestGetTextContent; @@ -109,7 +110,7 @@ // TestFramesClickJavascriptHref.class, // TestFramesNested.class, TestFramesOpen.class, -// TestFramesSpecialTargets.class, + TestFramesSpecialTargets.class, TestFunkEventHandling.class, TestGet.class, TestGetTextContent.class,