diff --git a/lib/capybara/driver/webkit.rb b/lib/capybara/driver/webkit.rb index 2bdd223..8c70387 100644 --- a/lib/capybara/driver/webkit.rb +++ b/lib/capybara/driver/webkit.rb @@ -37,7 +37,7 @@ class Capybara::Driver::Webkit end def body - source + browser.body end def header(key, value) @@ -45,7 +45,8 @@ class Capybara::Driver::Webkit end def execute_script(script) - browser.execute_script script + value = browser.execute_script script + value.empty? ? nil : value end def evaluate_script(script) @@ -98,7 +99,7 @@ class Capybara::Driver::Webkit def server_port @rack_server.port end - + private def url(path) diff --git a/lib/capybara/driver/webkit/browser.rb b/lib/capybara/driver/webkit/browser.rb index f1d0974..7e624d3 100644 --- a/lib/capybara/driver/webkit/browser.rb +++ b/lib/capybara/driver/webkit/browser.rb @@ -28,6 +28,10 @@ class Capybara::Driver::Webkit command("Reset") end + def body + command("Body") + end + def source command("Source") end diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index b815891..9dc5ff9 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -177,10 +177,6 @@ describe Capybara::Driver::Webkit do subject.source.should =~ %r{.*greeting.*}m end - it "aliases body as source" do - subject.body.should == subject.source - end - it "evaluates Javascript and returns a string" do result = subject.evaluate_script(%) result.should == "hello" diff --git a/spec/integration/session_spec.rb b/spec/integration/session_spec.rb index 53f91e7..57b1ff1 100644 --- a/spec/integration/session_spec.rb +++ b/spec/integration/session_spec.rb @@ -87,5 +87,5 @@ describe Capybara::Session, "with TestApp" do end it_should_behave_like "session" - # it_should_behave_like "session with javascript support" + it_should_behave_like "session with javascript support" end diff --git a/src/Body.h b/src/Body.h new file mode 100644 index 0000000..66fd34a --- /dev/null +++ b/src/Body.h @@ -0,0 +1,12 @@ +#include "Command.h" + +class WebPage; + +class Body : public Command { + Q_OBJECT + + public: + Body(WebPage *page, QObject *parent = 0); + virtual void start(QStringList &arguments); +}; + diff --git a/src/Connection.cpp b/src/Connection.cpp index 488eaaa..49898d8 100644 --- a/src/Connection.cpp +++ b/src/Connection.cpp @@ -12,6 +12,7 @@ #include "FrameFocus.h" #include "Header.h" #include "Render.h" +#include "Body.h" #include #include diff --git a/src/Source.cpp b/src/Source.cpp index 0fe8c0b..698d4e5 100644 --- a/src/Source.cpp +++ b/src/Source.cpp @@ -7,7 +7,14 @@ Source::Source(WebPage *page, QObject *parent) : Command(page, parent) { void Source::start(QStringList &arguments) { Q_UNUSED(arguments) - QString result = page()->currentFrame()->toHtml(); - emit finished(new Response(true, result)); + QNetworkAccessManager* accessManager = page()->networkAccessManager(); + QNetworkRequest request(page()->currentFrame()->url()); + reply = accessManager->get(request); + + connect(reply, SIGNAL(finished()), this, SLOT(sourceLoaded())); +} + +void Source::sourceLoaded() { + emit finished(new Response(true, reply->readAll())); } diff --git a/src/Source.h b/src/Source.h index cd77564..9925948 100644 --- a/src/Source.h +++ b/src/Source.h @@ -1,6 +1,7 @@ #include "Command.h" class WebPage; +class QNetworkReply; class Source : public Command { Q_OBJECT @@ -8,5 +9,11 @@ class Source : public Command { public: Source(WebPage *page, QObject *parent = 0); virtual void start(QStringList &arguments); + + public slots: + void sourceLoaded(); + + private: + QNetworkReply *reply; }; diff --git a/src/body.cpp b/src/body.cpp new file mode 100644 index 0000000..b41311e --- /dev/null +++ b/src/body.cpp @@ -0,0 +1,11 @@ +#include "Body.h" +#include "WebPage.h" + +Body::Body(WebPage *page, QObject *parent) : Command(page, parent) { +} + +void Body::start(QStringList &arguments) { + Q_UNUSED(arguments); + QString result = page()->currentFrame()->toHtml(); + emit finished(new Response(true, result)); +} diff --git a/src/find_command.h b/src/find_command.h index fa6a9a8..7bf0545 100644 --- a/src/find_command.h +++ b/src/find_command.h @@ -14,3 +14,4 @@ CHECK_COMMAND(Execute) CHECK_COMMAND(FrameFocus) CHECK_COMMAND(Header) CHECK_COMMAND(Render) +CHECK_COMMAND(Body) diff --git a/src/webkit_server.pro b/src/webkit_server.pro index 7a20b92..729c42e 100644 --- a/src/webkit_server.pro +++ b/src/webkit_server.pro @@ -1,8 +1,8 @@ TEMPLATE = app TARGET = webkit_server DESTDIR = . -HEADERS = WebPage.h Server.h Connection.h Command.h Visit.h Find.h Reset.h Node.h JavascriptInvocation.h Url.h Source.h Evaluate.h Execute.h FrameFocus.h Response.h NetworkAccessManager.h Header.h Render.h -SOURCES = main.cpp WebPage.cpp Server.cpp Connection.cpp Command.cpp Visit.cpp Find.cpp Reset.cpp Node.cpp JavascriptInvocation.cpp Url.cpp Source.cpp Evaluate.cpp Execute.cpp FrameFocus.cpp Response.cpp NetworkAccessManager.cpp Header.cpp Render.cpp +HEADERS = WebPage.h Server.h Connection.h Command.h Visit.h Find.h Reset.h Node.h JavascriptInvocation.h Url.h Source.h Evaluate.h Execute.h FrameFocus.h Response.h NetworkAccessManager.h Header.h Render.h body.h +SOURCES = main.cpp WebPage.cpp Server.cpp Connection.cpp Command.cpp Visit.cpp Find.cpp Reset.cpp Node.cpp JavascriptInvocation.cpp Url.cpp Source.cpp Evaluate.cpp Execute.cpp FrameFocus.cpp Response.cpp NetworkAccessManager.cpp Header.cpp Render.cpp body.cpp RESOURCES = webkit_server.qrc QT += network webkit CONFIG += console