diff --git a/rb/lib/selenium/webdriver/common/target_locator.rb b/rb/lib/selenium/webdriver/common/target_locator.rb index e5187bbe62cca..4f95b33211f13 100644 --- a/rb/lib/selenium/webdriver/common/target_locator.rb +++ b/rb/lib/selenium/webdriver/common/target_locator.rb @@ -18,6 +18,14 @@ def frame(id) @bridge.switchToFrame id end + # + # switch to the parent frame + # + + def parent_frame + @bridge.switchToParentFrame + end + # # switch to the given window handle # diff --git a/rb/lib/selenium/webdriver/remote/bridge.rb b/rb/lib/selenium/webdriver/remote/bridge.rb index b066b9ed9c1ef..ee8244e36eff3 100755 --- a/rb/lib/selenium/webdriver/remote/bridge.rb +++ b/rb/lib/selenium/webdriver/remote/bridge.rb @@ -190,6 +190,10 @@ def switchToFrame(id) execute :switchToFrame, {}, :id => id end + def switchToParentFrame + execute :switchToParentFrame + end + def switchToDefaultContent execute :switchToFrame, {}, :id => nil end diff --git a/rb/lib/selenium/webdriver/remote/commands.rb b/rb/lib/selenium/webdriver/remote/commands.rb index e33ad2b3bfa0c..7118a3668f6c6 100644 --- a/rb/lib/selenium/webdriver/remote/commands.rb +++ b/rb/lib/selenium/webdriver/remote/commands.rb @@ -65,6 +65,7 @@ class Selenium::WebDriver::Remote::Bridge # command :switchToFrame, :post, "session/:session_id/frame" + command :switchToParentFrame, :post, "session/:session_id/frame/parent" command :switchToWindow, :post, "session/:session_id/window" # diff --git a/rb/spec/integration/selenium/webdriver/target_locator_spec.rb b/rb/spec/integration/selenium/webdriver/target_locator_spec.rb index 353fd8c00ded3..f9ce443796ba6 100644 --- a/rb/spec/integration/selenium/webdriver/target_locator_spec.rb +++ b/rb/spec/integration/selenium/webdriver/target_locator_spec.rb @@ -26,6 +26,18 @@ end end + it "should switch to parent frame" do + driver.navigate.to url_for("iframes.html") + + iframe = driver.find_element(:tag_name => "iframe") + driver.switch_to.frame(iframe) + + driver.find_element(:name, 'login').should be_kind_of(WebDriver::Element) + + driver.switch_to.parent_frame + driver.find_element(:id, 'iframe_page_heading').should be_kind_of(WebDriver::Element) + end + # switching by name not yet supported by safari not_compliant_on :browser => [:ie, :iphone, :safari] do it "should switch to a window and back when given a block" do