Raise WebkitError for invalid XPath expressions
This commit is contained in:
parent
742092713a
commit
d84f5c9a2e
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,10 +34,11 @@ 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);
|
||||||
|
|
||||||
|
if (result.isValid()) {
|
||||||
QVariantList nodes = result.toList();
|
QVariantList nodes = result.toList();
|
||||||
QString response;
|
|
||||||
bool addComma = false;
|
bool addComma = false;
|
||||||
|
|
||||||
double node;
|
double node;
|
||||||
|
@ -53,5 +54,9 @@ void Find::receivedArgument(const char *xpath) {
|
||||||
std::cout << response.toAscii().data() << std::endl;
|
std::cout << response.toAscii().data() << std::endl;
|
||||||
|
|
||||||
emit finished(true, response);
|
emit finished(true, response);
|
||||||
|
} else {
|
||||||
|
response = "Invalid XPath expression";
|
||||||
|
emit finished(false, response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue