Raise WebkitError for invalid XPath expressions

This commit is contained in:
Joe Ferris 2011-02-24 23:22:56 -05:00
parent 742092713a
commit d84f5c9a2e
5 changed files with 33 additions and 21 deletions

View File

@ -3,6 +3,9 @@ require "capybara/driver/webkit/node"
require "capybara/driver/webkit/browser" require "capybara/driver/webkit/browser"
class Capybara::Driver::Webkit class Capybara::Driver::Webkit
class WebkitError < StandardError
end
def initialize(app, options={}) def initialize(app, options={})
@app = app @app = app
@options = options @options = options

View File

@ -44,7 +44,7 @@ class Capybara::Driver::Webkit
result = @socket.gets.strip result = @socket.gets.strip
puts ">> #{result}" puts ">> #{result}"
unless result == 'ok' unless result == 'ok'
raise raise WebkitError, read_response
end end
end end

View File

@ -18,17 +18,21 @@ describe Capybara::Driver::Webkit do
end end
subject { Capybara::Driver::Webkit.new(hello_app) } subject { Capybara::Driver::Webkit.new(hello_app) }
before { subject.visit("/hello") }
after { subject.reset! } after { subject.reset! }
it "finds content after loading a URL" do it "finds content after loading a URL" do
subject.visit("/hello")
subject.find("//*[contains(., 'hello')]").should_not be_empty subject.find("//*[contains(., 'hello')]").should_not be_empty
end end
it "has an empty page after reseting" do it "has an empty page after reseting" do
subject.visit("/")
subject.reset! subject.reset!
subject.find("//*[contains(., 'hello')]").should be_empty subject.find("//*[contains(., 'hello')]").should be_empty
end end
it "raises an error for an invalid xpath query" do
expect { subject.find("totally invalid salad") }.
to raise_error(Capybara::Driver::Webkit::WebkitError, /xpath/i)
end
end end

View File

@ -64,11 +64,11 @@ void Connection::finishCommand(bool success, QString &response) {
m_command = NULL; m_command = NULL;
if (success) { if (success) {
m_socket->write("ok\n"); m_socket->write("ok\n");
QString responseLength = QString::number(response.size()) + "\n";
m_socket->write(responseLength.toAscii());
m_socket->write(response.toAscii());
} else { } else {
m_socket->write("failure\n"); m_socket->write("failure\n");
} }
QString responseLength = QString::number(response.size()) + "\n";
m_socket->write(responseLength.toAscii());
m_socket->write(response.toAscii());
} }

View File

@ -34,24 +34,29 @@ void Find::receivedArgument(const char *xpath) {
std::cout << "<< Javascript to execute:" << std::endl; std::cout << "<< Javascript to execute:" << std::endl;
std::cout << javascript.toAscii().data() << std::endl; std::cout << javascript.toAscii().data() << std::endl;
QString response;
QVariant result = page()->mainFrame()->evaluateJavaScript(javascript); QVariant result = page()->mainFrame()->evaluateJavaScript(javascript);
QVariantList nodes = result.toList(); if (result.isValid()) {
QString response; QVariantList nodes = result.toList();
bool addComma = false; bool addComma = false;
double node; double node;
for (int i = 0; i < nodes.size(); i++) { for (int i = 0; i < nodes.size(); i++) {
node = nodes[i].toDouble(); node = nodes[i].toDouble();
if (addComma) if (addComma)
response.append(","); response.append(",");
response.append(QString::number(node)); response.append(QString::number(node));
addComma = true; addComma = true;
}
std::cout << "<< Got result:" << std::endl;
std::cout << response.toAscii().data() << std::endl;
emit finished(true, response);
} else {
response = "Invalid XPath expression";
emit finished(false, response);
} }
std::cout << "<< Got result:" << std::endl;
std::cout << response.toAscii().data() << std::endl;
emit finished(true, response);
} }