Moved Javascript code into a .js file that gets loaded into each page
This commit is contained in:
parent
e0c4f6f57d
commit
54d7df3c4c
|
@ -9,12 +9,7 @@ void Attribute::receivedArgument(const char *argument) {
|
|||
if (m_args.length() == 2) {
|
||||
QString nodeIndex = m_args[0];
|
||||
QString attributeName = m_args[1];
|
||||
QString javascript = QString("\
|
||||
(function () {\
|
||||
var node = window.__capybara_nodes[") + nodeIndex + "];\
|
||||
return node.getAttribute('" + attributeName + "');\
|
||||
})();\
|
||||
";
|
||||
QString javascript = QString("Capybara.attribute(" + nodeIndex + ", \"" + attributeName + "\")");
|
||||
QVariant result = page()->mainFrame()->evaluateJavaScript(javascript);
|
||||
QString attributeValue = result.toString();
|
||||
emit finished(true, attributeValue);
|
||||
|
|
23
src/Find.cpp
23
src/Find.cpp
|
@ -8,28 +8,7 @@ Find::Find(WebPage *page, QObject *parent) : Command(page, parent) {
|
|||
|
||||
void Find::receivedArgument(const char *xpath) {
|
||||
std::cout << "<< Running query: " << xpath << std::endl;
|
||||
QString javascript = QString("\
|
||||
(function () {\
|
||||
if (!window.__capybara_index) {\
|
||||
window.__capybara_index = 0;\
|
||||
window.__capybara_nodes = {};\
|
||||
}\
|
||||
var iterator = document.evaluate(\"") + xpath + "\",\
|
||||
document,\
|
||||
null,\
|
||||
XPathResult.ORDERED_NODE_ITERATOR_TYPE,\
|
||||
null);\
|
||||
var node;\
|
||||
var results = [];\
|
||||
while (node = iterator.iterateNext()) {\
|
||||
window.__capybara_index++;\
|
||||
window.__capybara_nodes[window.__capybara_index] = node;\
|
||||
results.push(window.__capybara_index);\
|
||||
}\
|
||||
return results;\
|
||||
})()\
|
||||
";
|
||||
|
||||
QString javascript = QString("Capybara.find(\"") + xpath + "\")";
|
||||
|
||||
std::cout << "<< Javascript to execute:" << std::endl;
|
||||
std::cout << javascript.toAscii().data() << std::endl;
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
#include "WebPage.h"
|
||||
#include <QResource>
|
||||
|
||||
WebPage::WebPage(QObject *parent) : QWebPage(parent) {
|
||||
connect(mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
|
||||
this, SLOT(injectJavascriptHelpers()));
|
||||
QResource javascript(":/capybara.js");
|
||||
m_capybaraJavascript = QString((const char *) javascript.data());
|
||||
}
|
||||
|
||||
void WebPage::injectJavascriptHelpers() {
|
||||
mainFrame()->evaluateJavaScript(m_capybaraJavascript);
|
||||
}
|
||||
|
||||
bool WebPage::shouldInterruptJavaScript() {
|
||||
|
|
|
@ -9,5 +9,9 @@ class WebPage : public QWebPage {
|
|||
|
||||
public slots:
|
||||
bool shouldInterruptJavaScript();
|
||||
void injectJavascriptHelpers();
|
||||
|
||||
private:
|
||||
QString m_capybaraJavascript;
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
Capybara = {
|
||||
nextIndex: 0,
|
||||
nodes: {},
|
||||
|
||||
find: function (xpath) {
|
||||
var iterator = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
|
||||
var node;
|
||||
var results = [];
|
||||
while (node = iterator.iterateNext()) {
|
||||
this.nextIndex++;
|
||||
this.nodes[this.nextIndex] = node;
|
||||
results.push(this.nextIndex);
|
||||
}
|
||||
return results;
|
||||
},
|
||||
|
||||
attribute: function (index, name) {
|
||||
return this.nodes[index].getAttribute(name);
|
||||
}
|
||||
};
|
||||
|
|
@ -3,6 +3,7 @@ TARGET = webkit_server
|
|||
DESTDIR = .
|
||||
HEADERS = WebPage.h Server.h Connection.h Command.h Visit.h Find.h Reset.h Attribute.h
|
||||
SOURCES = main.cpp WebPage.cpp Server.cpp Connection.cpp Command.cpp Visit.cpp Find.cpp Reset.cpp Attribute.cpp
|
||||
RESOURCES = webkit_server.qrc
|
||||
QT += network webkit
|
||||
CONFIG += console staticlib
|
||||
CONFIG += console
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>capybara.js</file>
|
||||
</qresource>
|
||||
</RCC>
|
Loading…
Reference in New Issue