Implemented Driver#execute_script
This commit is contained in:
parent
cfb5babae5
commit
3f519cd147
|
@ -37,7 +37,7 @@ class Capybara::Driver::Webkit
|
|||
end
|
||||
|
||||
def execute_script(script)
|
||||
raise Capybara::NotSupportedByDriverError
|
||||
browser.execute_script script
|
||||
end
|
||||
|
||||
def evaluate_script(script)
|
||||
|
|
|
@ -45,6 +45,10 @@ class Capybara::Driver::Webkit
|
|||
JSON.parse("[#{json}]").first
|
||||
end
|
||||
|
||||
def execute_script(script)
|
||||
command('Execute', script)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def start_server
|
||||
|
|
|
@ -115,5 +115,15 @@ describe Capybara::Driver::Webkit do
|
|||
result = subject.evaluate_script("[1,\n2]")
|
||||
result.should == [1, 2]
|
||||
end
|
||||
|
||||
it "executes Javascript" do
|
||||
subject.execute_script(%<document.getElementById('greeting').innerHTML = 'yo'>)
|
||||
subject.find("//p[contains(., 'yo')]").should_not be_empty
|
||||
end
|
||||
|
||||
it "raises an error for failing Javascript" do
|
||||
expect { subject.execute_script(%<invalid salad>) }.
|
||||
to raise_error(Capybara::Driver::Webkit::WebkitError)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "Url.h"
|
||||
#include "Source.h"
|
||||
#include "Evaluate.h"
|
||||
#include "Execute.h"
|
||||
|
||||
#include <QTcpSocket>
|
||||
#include <iostream>
|
||||
|
@ -60,7 +61,8 @@ void Connection::processNext(const char *data) {
|
|||
if (m_command) {
|
||||
startCommand();
|
||||
} else {
|
||||
m_socket->write("bad command\n");
|
||||
QString failure = QString("Unknown command: ") + data + "\n";
|
||||
writeResponse(false, failure);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -96,13 +98,16 @@ void Connection::finishCommand(bool success, QString &response) {
|
|||
m_command->deleteLater();
|
||||
m_command = NULL;
|
||||
m_arguments.clear();
|
||||
if (success) {
|
||||
m_socket->write("ok\n");
|
||||
} else {
|
||||
m_socket->write("failure\n");
|
||||
writeResponse(success, response);
|
||||
}
|
||||
|
||||
void Connection::writeResponse(bool success, QString &response) {
|
||||
if (success)
|
||||
m_socket->write("ok\n");
|
||||
else
|
||||
m_socket->write("failure\n");
|
||||
|
||||
QString responseLength = QString::number(response.size()) + "\n";
|
||||
m_socket->write(responseLength.toAscii());
|
||||
m_socket->write(response.toAscii());
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ class Connection : public QObject {
|
|||
Command *createCommand(const char *name);
|
||||
void startCommand();
|
||||
void continueCommand(const char *line);
|
||||
void writeResponse(bool success, QString &response);
|
||||
|
||||
QTcpSocket *m_socket;
|
||||
Command *m_command;
|
||||
|
|
|
@ -7,8 +7,6 @@ Evaluate::Evaluate(WebPage *page, QObject *parent) : Command(page, parent) {
|
|||
}
|
||||
|
||||
void Evaluate::start(QStringList &arguments) {
|
||||
Q_UNUSED(arguments);
|
||||
|
||||
QVariant result = page()->mainFrame()->evaluateJavaScript(arguments[0]);
|
||||
addVariant(result);
|
||||
emit finished(true, m_buffer);
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
#include "Execute.h"
|
||||
#include "WebPage.h"
|
||||
|
||||
Execute::Execute(WebPage *page, QObject *parent) : Command(page, parent) {
|
||||
}
|
||||
|
||||
void Execute::start(QStringList &arguments) {
|
||||
QVariant result = page()->mainFrame()->evaluateJavaScript(arguments[0]);
|
||||
QString response;
|
||||
if (result.isValid()) {
|
||||
emit finished(true, response);
|
||||
} else {
|
||||
response = "Javascript failed to execute";
|
||||
emit finished(false, response);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
#include "Command.h"
|
||||
|
||||
class WebPage;
|
||||
|
||||
class Execute : public Command {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Execute(WebPage *page, QObject *parent = 0);
|
||||
virtual void start(QStringList &arguments);
|
||||
};
|
||||
|
|
@ -10,3 +10,4 @@ CHECK_COMMAND(Node)
|
|||
CHECK_COMMAND(Url)
|
||||
CHECK_COMMAND(Source)
|
||||
CHECK_COMMAND(Evaluate)
|
||||
CHECK_COMMAND(Execute)
|
||||
|
|
|
@ -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
|
||||
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
|
||||
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
|
||||
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
|
||||
RESOURCES = webkit_server.qrc
|
||||
QT += network webkit
|
||||
CONFIG += console
|
||||
|
|
Loading…
Reference in New Issue