2011-02-26 03:57:55 +00:00
|
|
|
#include "JavascriptInvocation.h"
|
2012-12-11 03:53:03 +00:00
|
|
|
#include "WebPage.h"
|
|
|
|
#include <QApplication>
|
2011-02-26 03:57:55 +00:00
|
|
|
|
2012-12-11 03:53:03 +00:00
|
|
|
JavascriptInvocation::JavascriptInvocation(const QString &functionName, const QStringList &arguments, WebPage *page, QObject *parent) : QObject(parent) {
|
2011-02-26 03:57:55 +00:00
|
|
|
m_functionName = functionName;
|
|
|
|
m_arguments = arguments;
|
2012-12-11 03:53:03 +00:00
|
|
|
m_page = page;
|
2011-02-26 03:57:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
QString &JavascriptInvocation::functionName() {
|
|
|
|
return m_functionName;
|
|
|
|
}
|
|
|
|
|
|
|
|
QStringList &JavascriptInvocation::arguments() {
|
|
|
|
return m_arguments;
|
|
|
|
}
|
2012-12-11 03:53:03 +00:00
|
|
|
|
2013-01-12 23:02:10 +00:00
|
|
|
bool JavascriptInvocation::click(const QWebElement &element, int left, int top, int width, int height) {
|
2012-12-11 03:53:03 +00:00
|
|
|
QRect elementBox(left, top, width, height);
|
|
|
|
QWebFrame *parent = element.webFrame();
|
|
|
|
while (parent) {
|
2013-01-12 23:02:10 +00:00
|
|
|
elementBox.translate(parent->geometry().topLeft());
|
2012-12-11 03:53:03 +00:00
|
|
|
parent = parent->parentFrame();
|
|
|
|
}
|
|
|
|
QRect viewport(QPoint(0, 0), m_page->viewportSize());
|
2013-01-12 23:02:10 +00:00
|
|
|
QRect boundedBox = elementBox.intersected(viewport);
|
|
|
|
QPoint mousePos = boundedBox.center();
|
2012-12-11 03:53:03 +00:00
|
|
|
|
2013-01-12 23:02:10 +00:00
|
|
|
QRect r = QRect(QPoint(left, top), boundedBox.size());
|
|
|
|
QPoint p = r.center();
|
|
|
|
bool ok = QWebElement(element).evaluateJavaScript(QString("Capybara.clickTest(this, %1, %2);").arg(p.x()).arg(p.y())).toBool();
|
|
|
|
|
|
|
|
if (ok) {
|
|
|
|
execClick(mousePos);
|
|
|
|
}
|
|
|
|
return ok;
|
|
|
|
}
|
|
|
|
|
|
|
|
void JavascriptInvocation::execClick(QPoint mousePos) {
|
2012-12-11 03:53:03 +00:00
|
|
|
QMouseEvent event(QEvent::MouseMove, mousePos, Qt::NoButton, Qt::NoButton, Qt::NoModifier);
|
|
|
|
QApplication::sendEvent(m_page, &event);
|
|
|
|
|
|
|
|
event = QMouseEvent(QEvent::MouseButtonPress, mousePos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
|
|
|
|
QApplication::sendEvent(m_page, &event);
|
|
|
|
|
|
|
|
event = QMouseEvent(QEvent::MouseButtonRelease, mousePos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
|
|
|
|
QApplication::sendEvent(m_page, &event);
|
|
|
|
}
|