1+ /* ***************************************************************************
2+ **
3+ ** Copyright © 1992-2014 Cisco and/or its affiliates. All rights reserved.
4+ ** All rights reserved.
5+ **
6+ ** $CISCO_BEGIN_LICENSE:LGPL$
7+ **
8+ ** GNU Lesser General Public License Usage
9+ ** Alternatively, this file may be used under the terms of the GNU Lesser
10+ ** General Public License version 2.1 as published by the Free Software
11+ ** Foundation and appearing in the file LICENSE.LGPL included in the
12+ ** packaging of this file. Please review the following information to
13+ ** ensure the GNU Lesser General Public License version 2.1 requirements
14+ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
15+ **
16+ ** $CISCO_END_LICENSE$
17+ **
18+ ****************************************************************************/
19+
20+ #include " Headers.h"
21+
22+ #ifndef QT_NO_SAMPLES
23+ #include " Samples.h"
24+ #endif
25+
26+ #ifndef QT_NO_VNC
27+ void InitVNCClient ();
28+ #endif // QT_NO_VNC
29+ #ifndef QT_NO_UINPUT
30+ void InitUInputClient ();
31+ #endif // QT_NO_UINPUT
32+
33+ int wd_setup (int argc, char *argv[])
34+ {
35+ webdriver::ViewRunner::RegisterCustomRunner<webdriver::QViewRunner>();
36+
37+ webdriver::SessionLifeCycleActions::RegisterCustomLifeCycleActions<webdriver::QSessionLifeCycleActions>();
38+
39+ webdriver::ViewTransitionManager::SetURLTransitionAction (new webdriver::URLTransitionAction_CloseOldView ());
40+
41+ /* Configure widget views */
42+ webdriver::ViewCreator* widgetCreator = new webdriver::QWidgetViewCreator ();
43+
44+ /*
45+ Register view classes (here some test classes) that can be created by WebDriver.
46+ Creation can be triggered by client side request like wd.get("qtwidget://WindowTestWidget");
47+ */
48+ widgetCreator->RegisterViewClass <QWidget>(" QWidget" );
49+ #ifndef QT_NO_SAMPLES
50+ widgetCreator->RegisterViewClass <WindowTestWidget>(" WindowTestWidget" );
51+ widgetCreator->RegisterViewClass <ClickTestWidget>(" ClickTestWidget" );
52+ widgetCreator->RegisterViewClass <ElementAttributeTestWidget>(" ElementAttributeTestWidget" );
53+ widgetCreator->RegisterViewClass <FindingTestWidget>(" FindingTestWidget" );
54+ widgetCreator->RegisterViewClass <CoordinatesTestWidget>(" CoordinatesTestWidget" );
55+ widgetCreator->RegisterViewClass <ClickScrollingTestWidget>(" ClickScrollingTestWidget" );
56+ widgetCreator->RegisterViewClass <ElementSelectingTestWidget>(" ElementSelectingTestWidget" );
57+ widgetCreator->RegisterViewClass <TypingTestWidget>(" TypingTestWidget" );
58+ widgetCreator->RegisterViewClass <BasicKeyboardInterfaceTestWidget>(" BasicKeyboardInterfaceTestWidget" );
59+ widgetCreator->RegisterViewClass <TextHandlingTestWidget>(" TextHandlingTestWidget" );
60+ widgetCreator->RegisterViewClass <FormHandlingTestWidget>(" FormHandlingTestWidget" );
61+ widgetCreator->RegisterViewClass <XPathElementFindingTestWidget>(" XPathElementFindingTestWidget" );
62+ widgetCreator->RegisterViewClass <StaleElementReferenceTestWidget>(" StaleElementReferenceTestWidget" );
63+ widgetCreator->RegisterViewClass <VisibilityTestWidget>(" VisibilityTestWidget" );
64+ widgetCreator->RegisterViewClass <BasicMouseInterfaceTestWidget>(" BasicMouseInterfaceTestWidget" );
65+ widgetCreator->RegisterViewClass <TouchTestWidget>(" TouchTestWidget" );
66+ widgetCreator->RegisterViewClass <MenuTestWidget>(" MenuTestWidget" );
67+ #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
68+ widgetCreator->RegisterViewClass <WindowWithDeclarativeViewTestWidget>(" WindowWithDeclarativeViewTestWidget" );
69+ #endif
70+
71+ #if (1 == WD_ENABLE_PLAYER) && (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
72+ widgetCreator->RegisterViewClass <VideoTestWidget>(" VideoTestWidget" );
73+ #endif // WD_ENABLE_PLAYER
74+ #endif // QT_NO_SAMPLES
75+
76+ #if (WD_ENABLE_WEB_VIEW == 1)
77+ /* Configure web views */
78+ webdriver::ViewCreator* webCreator = new webdriver::QWebViewCreator ();
79+ webCreator->RegisterViewClass <QWebViewExt>(" QWebViewExt" );
80+ webdriver::ViewFactory::GetInstance ()->AddViewCreator (webCreator);
81+
82+ /* Configure WebView support */
83+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::WebViewEnumeratorImpl ());
84+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::QWebViewCmdExecutorCreator ());
85+
86+ /* Configure GraphicsWebView support */
87+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::GraphicsWebViewEnumeratorImpl ());
88+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::GraphicsWebViewCmdExecutorCreator ());
89+
90+ #ifndef QT_NO_SAMPLES
91+ /* Register som test classes */
92+ widgetCreator->RegisterViewClass <GraphicsWebViewTestWindows>(" GraphicsWebViewTestWindows" );
93+ widgetCreator->RegisterViewClass <WindowWithEmbeddedViewTestWidget>(" WindowWithEmbeddedViewTestWidget" );
94+ widgetCreator->RegisterViewClass <WidgetAndWebViewTestWindows>(" WidgetAndWebViewTestWindows" );
95+
96+
97+ #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
98+ widgetCreator->RegisterViewClass <WindowWithSeparatedDeclarativeAndWebViewsTestWidget>(" WindowWithSeparatedDeclarativeAndWebViewsTestWidget" );
99+ #endif // QT_VERSION
100+ #endif // QT_NO_SAMPLES
101+ #endif // WD_ENABLE_WEB_VIEW
102+
103+ #ifndef QT_NO_QML
104+ #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
105+ // Quick2 extension
106+ webdriver::ViewCreator* qmlCreator = new webdriver::Quick2ViewCreator ();
107+ qmlCreator->RegisterViewClass <QQuickView>(" QQuickView" );
108+ webdriver::ViewFactory::GetInstance ()->AddViewCreator (qmlCreator);
109+
110+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::Quick2ViewEnumeratorImpl ());
111+
112+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::Quick2ViewCmdExecutorCreator ());
113+ #else
114+ // Quick1 extension
115+ webdriver::ViewCreator* qmlCreator = new webdriver::QQmlViewCreator ();
116+ qmlCreator->RegisterViewClass <QDeclarativeView>(" QDeclarativeView" );
117+ webdriver::ViewFactory::GetInstance ()->AddViewCreator (qmlCreator);
118+
119+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::QmlViewEnumeratorImpl ());
120+
121+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::QQmlViewCmdExecutorCreator ());
122+
123+ #if (WD_ENABLE_WEB_VIEW == 1)
124+ qmlRegisterType<QDeclarativeWebSettings>();
125+ qmlRegisterType<QDeclarativeWebView>(" CiscoQtWebKit" , 1 , 0 , " CiscoWebView" );
126+ qmlRegisterType<QDeclarativeWebView>(" CiscoQtWebKit" , 1 , 1 , " CiscoWebView" );
127+ qmlRegisterRevision<QDeclarativeWebView, 0 >(" CiscoQtWebKit" , 1 , 0 );
128+ qmlRegisterRevision<QDeclarativeWebView, 1 >(" CiscoQtWebKit" , 1 , 1 );
129+ // webdriver::ViewEnumerator::AddViewEnumeratorImpl(new webdriver::QmlWebViewEnumeratorImpl());
130+ // webdriver::ViewCmdExecutorFactory::GetInstance()->AddViewCmdExecutorCreator(new webdriver::QmlWebViewCmdExecutorCreator());
131+ #endif
132+
133+ #endif
134+ #endif // QT_NO_QML
135+ /* Add widget creator last so that it deos not conflict with webview creator (QWebView is a subclass of QWidget)*/
136+ webdriver::ViewFactory::GetInstance ()->AddViewCreator (widgetCreator);
137+
138+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::WidgetViewEnumeratorImpl ());
139+
140+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::QWidgetViewCmdExecutorCreator ());
141+
142+ CommandLine cmd_line (CommandLine::NO_PROGRAM);
143+ #if defined(OS_WIN)
144+ cmd_line.ParseFromString (::GetCommandLineW ());
145+ #elif defined(OS_POSIX)
146+ cmd_line.InitFromArgv (argc, argv);
147+ #endif
148+
149+ #ifndef QT_NO_SAMPLES
150+ #if (1 == WD_ENABLE_PLAYER) && (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
151+ // check if --test_data_folder CL argument is present
152+ std::string testDataFolderSwitch = " test_data_folder" ;
153+
154+ if (cmd_line.HasSwitch (testDataFolderSwitch)) {
155+ testDataFolder = cmd_line.GetSwitchValueASCII (testDataFolderSwitch);
156+ } else {
157+ testDataFolder = " ./" ;
158+ }
159+
160+ std::cout << " Using " << testDataFolder << " as test data folder" << std::endl;
161+ #endif // WD_ENABLE_PLAYER
162+ #endif // QT_NO_SAMPLES
163+
164+ #if defined(OS_WIN)
165+ #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
166+ system (" qtenv2.bat vsvars" );
167+ #else // QT_VERSION
168+ system (" qtvars.bat vsvars" );
169+ #endif // QT_VERSION
170+ #endif // OS_WIN
171+
172+ /* Parse command line */
173+ webdriver::Server* wd_server = webdriver::Server::GetInstance ();
174+ if (0 != wd_server->Configure (cmd_line)) {
175+ std::cout << " Error while configuring WD server, exiting..." << std::endl;
176+ return 1 ;
177+ }
178+
179+ /* Example how to add a custom command */
180+ webdriver::RouteTable *routeTableWithShutdownCommand = new webdriver::RouteTable (wd_server->GetRouteTable ());
181+ const char shutdownCommandRoute[] = " /-cisco-shutdown" ;
182+ routeTableWithShutdownCommand->Add <webdriver::ShutdownCommand>(shutdownCommandRoute);
183+ routeTableWithShutdownCommand->Add <webdriver::ShutdownCommand>(webdriver::CommandRoutes::kShutdown );
184+ wd_server->SetRouteTable (routeTableWithShutdownCommand);
185+
186+ /* Optional VNC an user input support */
187+ InitVNCClient ();
188+ InitUInputClient ();
189+
190+ /* Start webdriver */
191+ int startError = wd_server->Start ();
192+ if (startError){
193+ std::cout << " Error while starting server, errorCode " << startError << std::endl;
194+ return startError;
195+ }
196+
197+ return startError;
198+ }
199+
200+ #ifndef QT_NO_VNC
201+ void InitVNCClient () {
202+ // start VNC module
203+ CommandLine cmdLine = webdriver::Server::GetInstance ()->GetCommandLine ();
204+ if (cmdLine.HasSwitch (webdriver::Switches::kVNCLogin ))
205+ {
206+ QString address = " 127.0.0.1" ;
207+ QString login = " anonymous" ;
208+ QString *password = new QString ();
209+ QString port = " 5900" ;
210+
211+ QString loginInfo = cmdLine.GetSwitchValueASCII (webdriver::Switches::kVNCLogin ).c_str ();
212+ VNCClient::SplitVncLoginParameters (loginInfo, &login, password, &address, &port);
213+
214+ VNCClient *client = VNCClient::getInstance ();
215+ if (!client->isReady ())
216+ {
217+ if (password->isEmpty ())
218+ client->Init (address, port.toInt ());
219+ else
220+ client->Init (address, port.toInt (), password);
221+ }
222+
223+ WDEventDispatcher::getInstance ()->add (new VNCEventDispatcher (client));
224+ }
225+ }
226+ #endif // QT_NO_VNC
227+
228+ #ifndef QT_NO_UINPUT
229+ void InitUInputClient () {
230+ // start user input device
231+ #ifdef OS_LINUX
232+ CommandLine cmdLine = webdriver::Server::GetInstance ()->GetCommandLine ();
233+ if (cmdLine.HasSwitch (webdriver::Switches::kUserInputDevice ))
234+ {
235+ UInputManager *manager = UInputManager::getInstance ();
236+ if (!manager->isReady ())
237+ {
238+ manager->registerUinputDevice ();
239+ }
240+
241+ WDEventDispatcher::getInstance ()->add (new UInputEventDispatcher (manager));
242+ }
243+ #endif // OS_LINUX
244+ }
245+ #endif // QT_NO_UINPUT
0 commit comments