Skip to content

Commit e932019

Browse files
Andrii BoichukAndrii Boichuk
authored andcommitted
Merge branch 'WD_1.X_dev' of https://portal-ua.globallogic.com/git/wd into WD_1.X_dev
2 parents 3c4660b + 8cec55c commit e932019

24 files changed

+2334
-121
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#ifndef WEBDRIVER_QT_DECLARATIVE_ITEM_VIEW_H_
2+
#define WEBDRIVER_QT_DECLARATIVE_ITEM_VIEW_H_
3+
4+
#include <string>
5+
6+
#include "webdriver_view_id.h"
7+
8+
#include <QtDeclarative/QDeclarativeItem>
9+
#include <QtCore/QPointer>
10+
#include <QtCore/QtGlobal>
11+
12+
namespace webdriver {
13+
14+
class QDeclarativeItemViewHandle : public ViewHandle {
15+
public:
16+
QDeclarativeItemViewHandle();
17+
QDeclarativeItemViewHandle(QDeclarativeItem* view);
18+
19+
virtual bool is_valid() const { return !view_.isNull(); };
20+
virtual bool equals(const ViewHandle* other) const;
21+
QDeclarativeItem* get() { return view_.data(); };
22+
23+
protected:
24+
QPointer<QDeclarativeItem> view_;
25+
//private:
26+
virtual ~QDeclarativeItemViewHandle() {};
27+
};
28+
29+
} // namespace webdriver
30+
31+
#endif // WEBDRIVER_QT_DECLARATIVE_ITEM_VIEW_H_

inc/extension_qt/q_view_executor.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,6 @@ class QViewCmdExecutor : public ViewCmdExecutor {
4848

4949
protected:
5050
QWidget* getView(const ViewId& viewId, Error** error);
51-
Rect ConvertQRectToRect(const QRect &rect);
52-
QRect ConvertRectToQRect(const Rect &rect);
53-
QPoint ConvertPointToQPoint(const Point &p);
54-
Qt::MouseButton ConvertMouseButtonToQtMouseButton(MouseButton button);
5551

5652
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
5753
QTouchDevice touchDevice;

inc/extension_qt/qdeclarativewebview.h

Lines changed: 354 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#ifndef WEBDRIVER_QML_WEB_VIEW_ENUMERATOR_H_
2+
#define WEBDRIVER_QML_WEB_VIEW_ENUMERATOR_H_
3+
4+
#include <string>
5+
#include <vector>
6+
#include <set>
7+
8+
#include "webdriver_view_enumerator.h"
9+
10+
class QDeclarativeItem;
11+
12+
namespace webdriver {
13+
14+
/// class for QDeclarativeWebView enumerator
15+
class QmlWebViewEnumeratorImpl : public AbstractViewEnumeratorImpl {
16+
public:
17+
virtual void EnumerateViews(Session* session, std::set<ViewId>* views) const;
18+
private:
19+
bool isWebView(QDeclarativeItem* item) const;
20+
};
21+
22+
} // namespace webdriver
23+
24+
#endif // WEBDRIVER_QML_WEB_VIEW_ENUMERATOR_H_
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
#ifndef WEBDRIVER_QML_WEB_VIEW_EXECUTOR_H
2+
#define WEBDRIVER_QML_WEB_VIEW_EXECUTOR_H
3+
4+
#include <string>
5+
#include <vector>
6+
#include <map>
7+
8+
#include "webdriver_view_executor.h"
9+
#include "webdriver_error.h"
10+
#include "extension_qt/qdeclarativewebview.h"
11+
12+
#include <QtCore/QDebug>
13+
14+
namespace webdriver {
15+
16+
class QmlWebViewCmdExecutorCreator : public ViewCmdExecutorCreator {
17+
public:
18+
static const ViewType QML_WEB_VIEW_TYPE;
19+
20+
QmlWebViewCmdExecutorCreator();
21+
virtual ~QmlWebViewCmdExecutorCreator();
22+
23+
virtual ViewCmdExecutor* CreateExecutor(Session* session, ViewId viewId) const;
24+
virtual bool CanHandleView(Session* session, ViewId viewId, ViewType* viewType = NULL) const;
25+
private:
26+
27+
DISALLOW_COPY_AND_ASSIGN(QmlWebViewCmdExecutorCreator);
28+
};
29+
30+
#define NOT_SUPPORTED_IMPL {*error = new Error(kCommandNotSupported, "Current view doesnt support this command.");}
31+
32+
class QmlWebViewCmdExecutor : public ViewCmdExecutor {
33+
public:
34+
explicit QmlWebViewCmdExecutor(Session* session, ViewId viewId);
35+
virtual ~QmlWebViewCmdExecutor();
36+
37+
virtual void CanHandleUrl(const std::string& url, bool* can, Error **error);
38+
virtual void GetTitle(std::string* title, Error **error);
39+
virtual void GetWindowName(std::string* name, Error ** error);
40+
virtual void GetBounds(Rect *bounds, Error **error);
41+
virtual void SetBounds(const Rect& bounds, Error** error) NOT_SUPPORTED_IMPL;
42+
virtual void Maximize(Error** error) NOT_SUPPORTED_IMPL;
43+
virtual void GetScreenShot(std::string* png, Error** error);
44+
virtual void GoForward(Error** error);
45+
virtual void GoBack(Error** error);
46+
virtual void Reload(Error** error);
47+
virtual void GetSource(std::string* source, Error** error);
48+
virtual void SendKeys(const string16& keys, Error** error);
49+
virtual void SendKeys(const ElementId& element, const string16& keys, Error** error);
50+
virtual void Close(Error** error) NOT_SUPPORTED_IMPL;
51+
virtual void MouseDoubleClick(Error** error);
52+
virtual void MouseButtonUp(Error** error);
53+
virtual void MouseButtonDown(Error** error);
54+
virtual void MouseClick(MouseButton button, Error** error);
55+
virtual void MouseMove(const int x_offset, const int y_offset, Error** error);
56+
virtual void MouseMove(const ElementId& element, int x_offset, const int y_offset, Error** error);
57+
virtual void MouseMove(const ElementId& element, Error** error);
58+
virtual void ClickElement(const ElementId& element, Error** error);
59+
virtual void GetAttribute(const ElementId& element, const std::string& key, base::Value** value, Error** error);
60+
virtual void ClearElement(const ElementId& element, Error** error);
61+
virtual void IsElementDisplayed(const ElementId& element, bool ignore_opacity, bool* is_displayed, Error** error);
62+
virtual void IsElementEnabled(const ElementId& element, bool* is_enabled, Error** error);
63+
virtual void ElementEquals(const ElementId& element1, const ElementId& element2, bool* is_equal, Error** error);
64+
virtual void GetElementLocation(const ElementId& element, Point* location, Error** error);
65+
virtual void GetElementLocationInView(const ElementId& element, Point* location, Error** error);
66+
virtual void GetElementTagName(const ElementId& element, std::string* tag_name, Error** error);
67+
virtual void IsOptionElementSelected(const ElementId& element, bool* is_selected, Error** error);
68+
virtual void SetOptionElementSelected(const ElementId& element, bool selected, Error** error);
69+
virtual void GetElementSize(const ElementId& element, Size* size, Error** error);
70+
virtual void ElementSubmit(const ElementId& element, Error** error);
71+
virtual void GetElementText(const ElementId& element, std::string* element_text, Error** error);
72+
virtual void GetElementCssProperty(const ElementId& element, const std::string& property, base::Value** value, Error** error);
73+
virtual void FindElement(const ElementId& root_element, const std::string& locator, const std::string& query, ElementId* element, Error** error);
74+
virtual void FindElements(const ElementId& root_element, const std::string& locator, const std::string& query, std::vector<ElementId>* elements, Error** error);
75+
virtual void ActiveElement(ElementId* element, Error** error);
76+
virtual void SwitchTo(Error** error);
77+
virtual void SwitchToFrameWithNameOrId(const std::string& name_or_id, Error** error);
78+
virtual void SwitchToFrameWithIndex(int index, Error** error);
79+
virtual void SwitchToFrameWithElement(const ElementId& element, Error** error);
80+
virtual void SwitchToTopFrame(Error** error);
81+
virtual void SwitchToTopFrameIfCurrentFrameInvalid(Error** error);
82+
virtual void NavigateToURL(const std::string& url, bool sync, Error** error);
83+
virtual void GetURL(std::string* url, Error** error);
84+
virtual void ExecuteScript(const std::string& script, const base::ListValue* const args, base::Value** value, Error** error);
85+
virtual void ExecuteAsyncScript(const std::string& script, const base::ListValue* const args, base::Value** value, Error** error);
86+
virtual void GetAppCacheStatus(int* status, Error** error);
87+
virtual void GetCookies(const std::string& url, base::ListValue** cookies, Error** error);
88+
virtual void SetCookie(const std::string& url, base::DictionaryValue* cookie_dict, Error** error);
89+
virtual void DeleteCookie(const std::string& url, const std::string& cookie_name, Error** error);
90+
virtual void GetStorageKeys(StorageType type, base::ListValue** keys, Error** error);
91+
virtual void SetStorageItem(StorageType type, const std::string& key, const std::string& value, Error** error);
92+
virtual void ClearStorage(StorageType type, Error** error);
93+
virtual void GetStorageItem(StorageType type, const std::string& key, std::string* value, Error** error);
94+
virtual void RemoveStorageItem(StorageType type, const std::string& key, std::string* value, Error** error);
95+
virtual void GetStorageSize(StorageType type, int* size, Error** error);
96+
virtual void GetGeoLocation(base::DictionaryValue** geolocation, Error** error) NOT_SUPPORTED_IMPL;
97+
virtual void SetGeoLocation(const base::DictionaryValue* geolocation, Error** error) NOT_SUPPORTED_IMPL;
98+
virtual void TouchClick(const ElementId& element, Error **error);
99+
virtual void TouchDoubleClick(const ElementId& element, Error **error);
100+
virtual void TouchDown(const int &x, const int &y, Error **error);
101+
virtual void TouchUp(const int &x, const int &y, Error **error);
102+
virtual void TouchMove(const int &x, const int &y, Error **error);
103+
virtual void TouchLongClick(const ElementId& element, Error **error);
104+
virtual void TouchScroll(const int &xoffset, const int &yoffset, Error **error);
105+
virtual void TouchScroll(const ElementId &element, const int &xoffset, const int &yoffset, Error **error);
106+
virtual void TouchFlick(const int &xSpeed, const int &ySpeed, Error **error);
107+
virtual void TouchFlick(const ElementId &element, const int &xoffset, const int &yoffset, const int &speed, Error **error);
108+
virtual void GetBrowserLog(base::ListValue** browserLog, Error **error);
109+
virtual void GetPlayerState(const ElementId& element, PlayerState*, Error**);
110+
virtual void SetPlayerState(const ElementId& element, PlayerState, Error**);
111+
virtual void GetPlayerVolume(const ElementId& element, double*, Error**);
112+
virtual void SetPlayerVolume(const ElementId& element, double, Error**);
113+
virtual void GetPlayingPosition(const ElementId& element, double*, Error**);
114+
virtual void SetPlayingPosition(const ElementId& element, double, Error**);
115+
virtual void SetMute(const ElementId& element, bool, Error**);
116+
virtual void GetMute(const ElementId& element, bool*, Error**);
117+
virtual void VisualizerSource(std::string* source, Error** error);
118+
virtual void VisualizerShowPoint(Error** error);
119+
virtual void GetAlertMessage(std::string* text, Error** error) NOT_SUPPORTED_IMPL;
120+
virtual void SetAlertPromptText(const std::string& alert_prompt_text, Error** error) NOT_SUPPORTED_IMPL;
121+
virtual void AcceptOrDismissAlert(bool accept, Error** error) NOT_SUPPORTED_IMPL;
122+
virtual void SetOrientation(const std::string &orientation, Error **error) NOT_SUPPORTED_IMPL;
123+
virtual void GetOrientation(std::string *orientation, Error **error);
124+
125+
protected:
126+
QDeclarativeWebView* getView(const ViewId& viewId, Error** error);
127+
128+
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
129+
QTouchDevice touchDevice;
130+
#endif
131+
132+
private:
133+
DISALLOW_COPY_AND_ASSIGN(QmlWebViewCmdExecutor);
134+
};
135+
136+
} // namespace webdriver
137+
138+
#endif // WEBDRIVER_QML_WEB_VIEW_EXECUTOR_H

inc/webdriver_basic_types.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ class Value;
1313

1414
namespace webdriver {
1515

16+
/// @enum MouseButton button codes
17+
enum MouseButton {
18+
kLeftButton = 0,
19+
kMiddleButton = 1,
20+
kRightButton = 2
21+
};
22+
1623
class Point {
1724
public:
1825
Point();

inc/webdriver_view_executor.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ webdriver::ViewCmdExecutorFactory::GetInstance()->AddViewCmdExecutorCreator(new
4545
#include "base/string16.h"
4646
#include "webdriver_view_id.h"
4747
#include "webdriver_element_id.h"
48+
#include "webdriver_basic_types.h"
4849

4950
namespace base {
5051
class Value;
@@ -58,13 +59,6 @@ class Rect;
5859
class Point;
5960
class Size;
6061

61-
/// @enum MouseButton button codes
62-
enum MouseButton {
63-
kLeftButton = 0,
64-
kMiddleButton = 1,
65-
kRightButton = 2
66-
};
67-
6862
/// @enum StorageType storage types
6963
enum StorageType {
7064
kLocalStorageType = 0,

src/Test/main.cc

Lines changed: 64 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,21 @@ std::string tests::testDataFolder;
5252

5353
#ifndef OS_IOS
5454
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
55-
// headers for Quick2 extension
56-
#include "extension_qt/quick2_view_creator.h"
57-
#include "extension_qt/quick2_view_executor.h"
58-
#include "extension_qt/quick2_view_enumerator.h"
55+
// headers for Quick2 extension
56+
#include "extension_qt/quick2_view_creator.h"
57+
#include "extension_qt/quick2_view_executor.h"
58+
#include "extension_qt/quick2_view_enumerator.h"
5959
#else
60-
#include <QtDeclarative/QDeclarativeView>
61-
// headers for Quick1 extension
62-
#include "extension_qt/qml_view_creator.h"
63-
#include "extension_qt/qml_view_executor.h"
64-
#include "extension_qt/qml_view_enumerator.h"
60+
#include <QtDeclarative/QDeclarativeView>
61+
// headers for Quick1 extension
62+
#include "extension_qt/qml_view_creator.h"
63+
#include "extension_qt/qml_view_executor.h"
64+
#include "extension_qt/qml_view_enumerator.h"
65+
#if (WD_TEST_ENABLE_WEB_VIEW == 1)
66+
#include "extension_qt/qdeclarativewebview.h"
67+
#include "extension_qt/qml_web_view_enumerator.h"
68+
#include "extension_qt/qml_web_view_executor.h"
69+
#endif
6570
#endif
6671
#endif //OS_IOS
6772

@@ -90,6 +95,8 @@ std::string tests::testDataFolder;
9095
void setQtSettings();
9196
void PrintVersion();
9297
void PrintHelp();
98+
void InitVNCClient();
99+
void InitUInputClient();
93100

94101
int main(int argc, char *argv[])
95102
{
@@ -99,7 +106,7 @@ int main(int argc, char *argv[])
99106
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
100107
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
101108
#endif
102-
109+
103110
webdriver::ViewRunner::RegisterCustomRunner<webdriver::QViewRunner>();
104111

105112
webdriver::SessionLifeCycleActions::RegisterCustomLifeCycleActions<webdriver::QSessionLifeCycleActions>();
@@ -161,6 +168,17 @@ int main(int argc, char *argv[])
161168
webdriver::ViewEnumerator::AddViewEnumeratorImpl(new webdriver::QmlViewEnumeratorImpl());
162169

163170
webdriver::ViewCmdExecutorFactory::GetInstance()->AddViewCmdExecutorCreator(new webdriver::QQmlViewCmdExecutorCreator());
171+
172+
#if (WD_TEST_ENABLE_WEB_VIEW == 1)
173+
qmlRegisterType<QDeclarativeWebSettings>();
174+
qmlRegisterType<QDeclarativeWebView>("CiscoQtWebKit", 1, 0, "CiscoWebView");
175+
qmlRegisterType<QDeclarativeWebView>("CiscoQtWebKit", 1, 1, "CiscoWebView");
176+
qmlRegisterRevision<QDeclarativeWebView, 0>("CiscoQtWebKit", 1, 0);
177+
qmlRegisterRevision<QDeclarativeWebView, 1>("CiscoQtWebKit", 1, 1);
178+
webdriver::ViewEnumerator::AddViewEnumeratorImpl(new webdriver::QmlWebViewEnumeratorImpl());
179+
webdriver::ViewCmdExecutorFactory::GetInstance()->AddViewCmdExecutorCreator(new webdriver::QmlWebViewCmdExecutorCreator());
180+
#endif
181+
164182
#endif
165183
#endif //OS_IOS
166184

@@ -219,6 +237,39 @@ int main(int argc, char *argv[])
219237
routeTableWithShutdownCommand->Add<webdriver::ShutdownCommand>(shutdownCommandRoute);
220238
wd_server->SetRouteTable(routeTableWithShutdownCommand);
221239

240+
InitVNCClient();
241+
InitUInputClient();
242+
243+
int startError = wd_server->Start();
244+
if (startError)
245+
return startError;
246+
247+
setQtSettings();
248+
249+
return app.exec();
250+
}
251+
252+
void setQtSettings() {
253+
#if (WD_TEST_ENABLE_WEB_VIEW == 1)
254+
QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
255+
QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled, true);
256+
QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
257+
QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptCanCloseWindows, true);
258+
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalStorageEnabled, true);
259+
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true);
260+
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalContentCanAccessFileUrls, true);
261+
QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
262+
QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true);
263+
QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
264+
QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);
265+
QWebSettings::globalSettings()->enablePersistentStorage("./web/html5");
266+
QWebSettings::globalSettings()->setLocalStoragePath("./web/html5");
267+
QWebSettings::globalSettings()->setOfflineStoragePath("./web/html5");
268+
QWebSettings::globalSettings()->setOfflineWebApplicationCachePath("./web/html5");
269+
#endif
270+
}
271+
272+
void InitVNCClient() {
222273
// start VNC module
223274
CommandLine cmdLine = webdriver::Server::GetInstance()->GetCommandLine();
224275
if (cmdLine.HasSwitch(webdriver::Switches::kVNCLogin))
@@ -242,9 +293,12 @@ int main(int argc, char *argv[])
242293

243294
WDEventDispatcher::getInstance()->add(new VNCEventDispatcher(client));
244295
}
296+
}
245297

298+
void InitUInputClient() {
246299
// start user input device
247300
#ifdef OS_LINUX
301+
CommandLine cmdLine = webdriver::Server::GetInstance()->GetCommandLine();
248302
if (cmdLine.HasSwitch(webdriver::Switches::kUserInputDevice))
249303
{
250304
UInputManager *manager = UInputManager::getInstance();
@@ -256,34 +310,6 @@ int main(int argc, char *argv[])
256310
WDEventDispatcher::getInstance()->add(new UInputEventDispatcher(manager));
257311
}
258312
#endif // OS_LINUX
259-
260-
int startError = wd_server->Start();
261-
if (startError)
262-
return startError;
263-
264-
setQtSettings();
265-
266-
return app.exec();
267-
}
268-
269-
void setQtSettings() {
270-
#if (WD_TEST_ENABLE_WEB_VIEW == 1)
271-
QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
272-
QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled, true);
273-
QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
274-
QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptCanCloseWindows, true);
275-
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalStorageEnabled, true);
276-
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true);
277-
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalContentCanAccessFileUrls, true);
278-
QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
279-
QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true);
280-
QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
281-
QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);
282-
QWebSettings::globalSettings()->enablePersistentStorage("./web/html5");
283-
QWebSettings::globalSettings()->setLocalStoragePath("./web/html5");
284-
QWebSettings::globalSettings()->setOfflineStoragePath("./web/html5");
285-
QWebSettings::globalSettings()->setOfflineWebApplicationCachePath("./web/html5");
286-
#endif
287313
}
288314

289315
void PrintVersion() {

0 commit comments

Comments
 (0)