Skip to content

Commit 5671ed3

Browse files
author
hekra
committed
JavaScript expression can find QML element by objectName: Qt4 support
1 parent 0207cef commit 5671ed3

File tree

5 files changed

+47
-5
lines changed

5 files changed

+47
-5
lines changed

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ else
2222
fi
2323
if [ -z $mode ];
2424
then
25-
modes="release_dbg release"
25+
modes="release"
2626
else
2727
modes=$mode
2828
fi

src/webdriver/extension_qt/qml_objname_util.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@
2323

2424
namespace webdriver {
2525

26+
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
2627
ObjectNameUtils::ObjectNameUtils(QQuickItem *root) : root_(root) {}
28+
#else
29+
ObjectNameUtils::ObjectNameUtils(QDeclarativeItem *root) : root_(root) {}
30+
#endif
2731
ObjectNameUtils::~ObjectNameUtils() {}
2832

2933
QObject *ObjectNameUtils::findChild(const QString& name) {

src/webdriver/extension_qt/qml_objname_util.h

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@
2222

2323
#include <string>
2424
#include <QtCore/QDebug>
25-
#include <QtQuick/QQuickItem>
2625
#include "common_util.h"
26+
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
27+
#include <QtQuick/QQuickItem>
28+
#else
29+
#include <QtDeclarative/QDeclarativeItem>
30+
#endif
2731

2832
namespace webdriver {
2933

@@ -32,16 +36,36 @@ class ObjectNameUtils
3236
{
3337
Q_OBJECT
3438
public:
39+
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
3540
ObjectNameUtils(QQuickItem *root);
41+
#else
42+
ObjectNameUtils(QDeclarativeItem *root);
43+
#endif
3644
~ObjectNameUtils();
3745
Q_INVOKABLE QObject *findChild(const QString& name);
3846
protected:
39-
QQuickItem* root_;
47+
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
48+
QQuickItem *root_;
49+
50+
QObject *findChild(QQuickItem *item, const QString& name) {
51+
if (name == item->objectName())
52+
return item;
4053

41-
QObject * findChild(const QQuickItem* item, const QString& name) {
4254
QList<QQuickItem*> childs = item->childItems();
4355

4456
foreach(QQuickItem *child, childs) {
57+
#else
58+
QDeclarativeItem *root_;
59+
60+
QObject *findChild(QDeclarativeItem *item, const QString& name) {
61+
if (name == item->objectName())
62+
return item;
63+
64+
QList<QGraphicsItem*> childs = item->childItems();
65+
66+
foreach(QGraphicsItem *gchild, childs) {
67+
QDeclarativeItem *child = qobject_cast<QDeclarativeItem*>(gchild);
68+
#endif
4569
if (!child) continue;
4670
if (name == child->objectName())
4771
return child;

src/webdriver/extension_qt/qml_view_executor.cc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "extension_qt/widget_element_handle.h"
3232
#include "extension_qt/widget_view_handle.h"
3333
#include "qml_view_util.h"
34+
#include "qml_objname_util.h"
3435

3536
#include <QtCore/QBuffer>
3637
#include <QtCore/QDebug>
@@ -39,6 +40,7 @@
3940

4041
#include <QtDeclarative/QDeclarativeExpression>
4142
#include <QtDeclarative/QDeclarativeEngine>
43+
#include <QtDeclarative/QDeclarativeContext>
4244

4345
#include "third_party/pugixml/pugixml.hpp"
4446

@@ -791,7 +793,16 @@ void QQmlViewCmdExecutor::ExecuteScript(const std::string& script, const base::L
791793
script.c_str(),
792794
args_as_json.c_str());
793795

794-
QDeclarativeExpression expr(view->engine()->rootContext(), view->rootObject(), jscript.c_str());
796+
QDeclarativeContext *rootContext = view->rootContext();
797+
QVariant p = rootContext->contextProperty("ObjectNameUtils");
798+
799+
if (p.isNull()) {
800+
QDeclarativeItem *rootItem = qobject_cast<QDeclarativeItem*>(view->rootObject());
801+
ObjectNameUtils* objn = new ObjectNameUtils(rootItem);
802+
rootContext->setContextProperty("ObjectNameUtils", objn);
803+
}
804+
805+
QDeclarativeExpression expr(rootContext, view->rootObject(), jscript.c_str());
795806
QVariant result = expr.evaluate();
796807
if (expr.hasError()) {
797808
*error = new Error(kJavaScriptError, expr.error().toString().toStdString());

wd_ext_qt.gyp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@
121121
'src/webdriver/extension_qt/qml_view_enumerator.cc',
122122
'src/webdriver/extension_qt/qml_view_executor.cc',
123123
'src/webdriver/extension_qt/qml_view_util.cc',
124+
'src/webdriver/extension_qt/qml_objname_util.h',
125+
'src/webdriver/extension_qt/qml_objname_util.cc',
126+
'<(INTERMEDIATE_DIR)/moc_qml_objname_util.cc',
124127
],
125128
} ],
126129

0 commit comments

Comments
 (0)