diff --git a/gemfiles/master.gemfile b/gemfiles/master.gemfile index 220b42e..52e7a96 100644 --- a/gemfiles/master.gemfile +++ b/gemfiles/master.gemfile @@ -2,8 +2,7 @@ source "https://rubygems.org" -gem "capybara", github: "jnicklas/capybara" +gem "capybara", github: "teamcapybara/capybara" gem "puma" -gem 'byebug' gemspec path: "../" diff --git a/lib/capybara/webkit/browser.rb b/lib/capybara/webkit/browser.rb index 6a8c426..65fcb5c 100644 --- a/lib/capybara/webkit/browser.rb +++ b/lib/capybara/webkit/browser.rb @@ -28,6 +28,10 @@ module Capybara::Webkit command("Title") end + def frame_title + command("FrameTitle") + end + def find_xpath(query) command("FindXpath", query).split(",") end @@ -81,6 +85,10 @@ module Capybara::Webkit command("CurrentUrl") end + def frame_url + command("FrameUrl") + end + def frame_focus(selector=nil) if selector.respond_to?(:base) selector.base.invoke("focus_frame") diff --git a/lib/capybara/webkit/driver.rb b/lib/capybara/webkit/driver.rb index 951cc4a..ac00333 100644 --- a/lib/capybara/webkit/driver.rb +++ b/lib/capybara/webkit/driver.rb @@ -43,7 +43,15 @@ module Capybara::Webkit end def current_url - @browser.current_url + if Capybara::VERSION.to_f < 3.0 + @browser.frame_url + else + @browser.current_url + end + end + + def frame_url + @browser.frame_url end def visit(path) @@ -73,7 +81,15 @@ module Capybara::Webkit end def title - @browser.title + if Capybara::VERSION.to_f < 3.0 + frame_title + else + @browser.title + end + end + + def frame_title + @browser.frame_title end def execute_script(script, *args) diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index c5ef82a..e240e1f 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -35,6 +35,7 @@ describe Capybara::Webkit::Driver do <<-HTML + Main @@ -172,7 +173,11 @@ describe Capybara::Webkit::Driver do it "returns the current URL" do driver.within_frame("f") do - expect(driver.current_url).to eq driver_url(driver, "/iframe") + if Capybara::VERSION.to_f < 3.0 + expect(driver.current_url).to eq driver_url(driver, "/iframe") + else + expect(driver.current_url).to eq driver_url(driver, "/") + end end end @@ -210,9 +215,24 @@ describe Capybara::Webkit::Driver do end end - it "returns the document title" do + if Capybara::VERSION.to_f < 3.0 + it "returns the document title" do + driver.within_frame("f") do + expect(driver.title).to eq 'Title' + end + end + else + it "returns the top level browsing context text" do + driver.within_frame("f") do + expect(driver.title).to eq 'Main' + end + end + end + + it "returns the title for the current frame" do + expect(driver.frame_title).to eq 'Main' driver.within_frame("f") do - expect(driver.title).to eq "Title" + expect(driver.frame_title).to eq 'Title' end end end diff --git a/src/CommandFactory.cpp b/src/CommandFactory.cpp index 26ce2f4..387be90 100644 --- a/src/CommandFactory.cpp +++ b/src/CommandFactory.cpp @@ -53,6 +53,8 @@ #include "SetUnknownUrlMode.h" #include "AllowUrl.h" #include "BlockUrl.h" +#include "FrameTitle.h" +#include "FrameUrl.h" CommandFactory::CommandFactory(WebPageManager *manager, QObject *parent) : QObject(parent) { m_manager = manager; diff --git a/src/CurrentUrl.cpp b/src/CurrentUrl.cpp index 161a476..82c45eb 100644 --- a/src/CurrentUrl.cpp +++ b/src/CurrentUrl.cpp @@ -7,7 +7,7 @@ CurrentUrl::CurrentUrl(WebPageManager *manager, QStringList &arguments, QObject void CurrentUrl::start() { QStringList arguments; - QVariant result = page()->currentFrame()->evaluateJavaScript("window.location.toString()"); + QVariant result = page()->mainFrame()->evaluateJavaScript("window.location.toString()"); QString url = result.toString(); finish(true, url); } diff --git a/src/FrameTitle.cpp b/src/FrameTitle.cpp new file mode 100644 index 0000000..be2dc33 --- /dev/null +++ b/src/FrameTitle.cpp @@ -0,0 +1,11 @@ +#include "FrameTitle.h" +#include "SocketCommand.h" +#include "WebPage.h" +#include "WebPageManager.h" + +FrameTitle::FrameTitle(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) { +} + +void FrameTitle::start() { + finish(true, page()->currentFrame()->title()); +} diff --git a/src/FrameTitle.h b/src/FrameTitle.h new file mode 100644 index 0000000..3b821e0 --- /dev/null +++ b/src/FrameTitle.h @@ -0,0 +1,10 @@ +#include "SocketCommand.h" + +class FrameTitle : public SocketCommand { + Q_OBJECT + + public: + FrameTitle(WebPageManager *, QStringList &arguments, QObject *parent = 0); + virtual void start(); +}; + diff --git a/src/FrameUrl.cpp b/src/FrameUrl.cpp new file mode 100644 index 0000000..6bfeaab --- /dev/null +++ b/src/FrameUrl.cpp @@ -0,0 +1,13 @@ +#include "FrameUrl.h" +#include "SocketCommand.h" +#include "WebPage.h" +#include "WebPageManager.h" + +FrameUrl::FrameUrl(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) { +} + +void FrameUrl::start() { + QVariant result = page()->currentFrame()->evaluateJavaScript("window.location.toString()"); + QString url = result.toString(); + finish(true, url); +} diff --git a/src/FrameUrl.h b/src/FrameUrl.h new file mode 100644 index 0000000..e2b8e5e --- /dev/null +++ b/src/FrameUrl.h @@ -0,0 +1,10 @@ +#include "SocketCommand.h" + +class FrameUrl : public SocketCommand { + Q_OBJECT + + public: + FrameUrl(WebPageManager *, QStringList &arguments, QObject *parent = 0); + virtual void start(); +}; + diff --git a/src/Title.cpp b/src/Title.cpp index 2ffce04..29478f2 100644 --- a/src/Title.cpp +++ b/src/Title.cpp @@ -7,5 +7,5 @@ Title::Title(WebPageManager *manager, QStringList &arguments, QObject *parent) : } void Title::start() { - finish(true, page()->currentFrame()->title()); + finish(true, page()->mainFrame()->title()); } diff --git a/src/find_command.h b/src/find_command.h index 559e977..e590166 100644 --- a/src/find_command.h +++ b/src/find_command.h @@ -55,3 +55,5 @@ CHECK_COMMAND(FindModal) CHECK_COMMAND(SetUnknownUrlMode) CHECK_COMMAND(AllowUrl) CHECK_COMMAND(BlockUrl) +CHECK_COMMAND(FrameTitle) +CHECK_COMMAND(FrameUrl) diff --git a/src/webkit_server.pro b/src/webkit_server.pro index 7bb7b0c..7a42a42 100644 --- a/src/webkit_server.pro +++ b/src/webkit_server.pro @@ -10,6 +10,8 @@ PRECOMPILED_DIR = $${BUILD_DIR} OBJECTS_DIR = $${BUILD_DIR} MOC_DIR = $${BUILD_DIR} HEADERS = \ + FrameUrl.h \ + FrameTitle.h \ BlockUrl.h \ AllowUrl.h \ SetUnknownUrlMode.h \ @@ -95,6 +97,8 @@ HEADERS = \ UnknownUrlHandler.h SOURCES = \ + FrameUrl.cpp \ + FrameTitle.cpp \ BlockUrl.cpp \ AllowUrl.cpp \ SetUnknownUrlMode.cpp \