8282#include " extension_qt/uinput_manager.h"
8383#include " webdriver_switches.h"
8484
85- int wd_setup (int argc, char *argv[]);
85+ #ifndef QT_NO_SAMPLES
86+ #include " Samples.h"
87+ #endif
88+
89+ int wd_setup (int argc, char *argv[])
90+ {
91+ webdriver::ViewRunner::RegisterCustomRunner<webdriver::QViewRunner>();
92+
93+ webdriver::SessionLifeCycleActions::RegisterCustomLifeCycleActions<webdriver::QSessionLifeCycleActions>();
94+
95+ webdriver::ViewTransitionManager::SetURLTransitionAction (new webdriver::URLTransitionAction_CloseOldView ());
96+
97+ /* Configure widget views */
98+ webdriver::ViewCreator* widgetCreator = new webdriver::QWidgetViewCreator ();
99+ webdriver::ViewCreator* webCreator = NULL ;
100+ webdriver::ViewCreator* qmlCreator = NULL ;
101+ /*
102+ Register view classes (here some test classes) that can be created by WebDriver.
103+ Creation can be triggered by client side request like wd.get("qtwidget://WindowTestWidget");
104+ See https://github.com/cisco-open-source/qtwebdriver/wiki/Hybridity-And-View-Management
105+ */
106+ widgetCreator->RegisterViewClass <QWidget>(" QWidget" );
107+
108+ #if (WD_ENABLE_WEB_VIEW == 1)
109+ /* Configure web views */
110+ webCreator = new webdriver::QWebViewCreator ();
111+ webCreator->RegisterViewClass <QWebViewExt>(" QWebViewExt" );
112+ webdriver::ViewFactory::GetInstance ()->AddViewCreator (webCreator);
113+
114+ /* Configure WebView support */
115+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::WebViewEnumeratorImpl ());
116+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::QWebViewCmdExecutorCreator ());
117+
118+ /* Configure GraphicsWebView support */
119+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::GraphicsWebViewEnumeratorImpl ());
120+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::GraphicsWebViewCmdExecutorCreator ());
121+ #endif // WD_ENABLE_WEB_VIEW
122+
123+ #ifndef QT_NO_QML
124+ #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
125+ // Quick2 extension
126+ qmlCreator = new webdriver::Quick2ViewCreator ();
127+ qmlCreator->RegisterViewClass <QQuickView>(" QQuickView" );
128+ webdriver::ViewFactory::GetInstance ()->AddViewCreator (qmlCreator);
129+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::Quick2ViewEnumeratorImpl ());
130+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::Quick2ViewCmdExecutorCreator ());
131+ #else
132+ // Quick1 extension
133+ qmlCreator = new webdriver::QQmlViewCreator ();
134+ qmlCreator->RegisterViewClass <QDeclarativeView>(" QDeclarativeView" );
135+ webdriver::ViewFactory::GetInstance ()->AddViewCreator (qmlCreator);
136+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::QmlViewEnumeratorImpl ());
137+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::QQmlViewCmdExecutorCreator ());
138+
139+ #if (WD_ENABLE_WEB_VIEW == 1)
140+ qmlRegisterType<QDeclarativeWebSettings>();
141+ qmlRegisterType<QDeclarativeWebView>(" CiscoQtWebKit" , 1 , 0 , " CiscoWebView" );
142+ qmlRegisterType<QDeclarativeWebView>(" CiscoQtWebKit" , 1 , 1 , " CiscoWebView" );
143+ qmlRegisterRevision<QDeclarativeWebView, 0 >(" CiscoQtWebKit" , 1 , 0 );
144+ qmlRegisterRevision<QDeclarativeWebView, 1 >(" CiscoQtWebKit" , 1 , 1 );
145+ #endif
146+
147+ #endif
148+ #endif // QT_NO_QML
149+ /* Add widget creator last so that it deos not conflict with webview creator (QWebView is a subclass of QWidget)*/
150+ webdriver::ViewFactory::GetInstance ()->AddViewCreator (widgetCreator);
151+ webdriver::ViewEnumerator::AddViewEnumeratorImpl (new webdriver::WidgetViewEnumeratorImpl ());
152+ webdriver::ViewCmdExecutorFactory::GetInstance ()->AddViewCmdExecutorCreator (new webdriver::QWidgetViewCmdExecutorCreator ());
153+
154+ CommandLine cmd_line (CommandLine::NO_PROGRAM);
155+ #if defined(OS_WIN)
156+ cmd_line.ParseFromString (::GetCommandLineW ());
157+ #elif defined(OS_POSIX)
158+ cmd_line.InitFromArgv (argc, argv);
159+ #endif
160+
161+ #ifndef QT_NO_SAMPLES
162+ /* optional samples setup */
163+ wd_samples_setup (widgetCreator, webCreator, qmlCreator, cmd_line);
164+ #endif // QT_NO_SAMPLES
165+
166+ #if defined(OS_WIN)
167+ #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
168+ system (" qtenv2.bat vsvars" );
169+ #else // QT_VERSION
170+ system (" qtvars.bat vsvars" );
171+ #endif // QT_VERSION
172+ #endif // OS_WIN
173+
174+ /* Parse command line */
175+ webdriver::Server* wd_server = webdriver::Server::GetInstance ();
176+ if (0 != wd_server->Configure (cmd_line)) {
177+ std::cout << " Error while configuring WD server, exiting..." << std::endl;
178+ return 1 ;
179+ }
180+
181+ /* Example how to add a custom command */
182+ webdriver::RouteTable *routeTableWithShutdownCommand = new webdriver::RouteTable (wd_server->GetRouteTable ());
183+ const char shutdownCommandRoute[] = " /-cisco-shutdown" ;
184+ routeTableWithShutdownCommand->Add <webdriver::ShutdownCommand>(shutdownCommandRoute);
185+ routeTableWithShutdownCommand->Add <webdriver::ShutdownCommand>(webdriver::CommandRoutes::kShutdown );
186+ wd_server->SetRouteTable (routeTableWithShutdownCommand);
187+
188+ /* check for VNC input support */
189+ if (cmd_line.HasSwitch (webdriver::Switches::kVNCLogin ))
190+ {
191+ QString address = " 127.0.0.1" ;
192+ QString login = " anonymous" ;
193+ QString *password = new QString ();
194+ QString port = " 5900" ;
195+
196+ QString loginInfo = cmd_line.GetSwitchValueASCII (webdriver::Switches::kVNCLogin ).c_str ();
197+ VNCClient::SplitVncLoginParameters (loginInfo, &login, password, &address, &port);
198+
199+ VNCClient *client = VNCClient::getInstance ();
200+ if (!client->isReady ())
201+ {
202+ if (password->isEmpty ())
203+ client->Init (address, port.toInt ());
204+ else
205+ client->Init (address, port.toInt (), password);
206+ }
207+
208+ WDEventDispatcher::getInstance ()->add (new VNCEventDispatcher (client));
209+ }
210+
211+ /* check for Linux UInput input support */
212+ #ifdef OS_LINUX
213+ if (cmd_line.HasSwitch (webdriver::Switches::kUserInputDevice ))
214+ {
215+ UInputManager *manager = UInputManager::getInstance ();
216+ if (!manager->isReady ())
217+ {
218+ manager->registerUinputDevice ();
219+ }
220+
221+ WDEventDispatcher::getInstance ()->add (new UInputEventDispatcher (manager));
222+ }
223+ #endif // OS_LINUX
224+
225+ /* Start webdriver */
226+ int startError = wd_server->Start ();
227+ if (startError){
228+ std::cout << " Error while starting server, errorCode " << startError << std::endl;
229+ return startError;
230+ }
231+
232+ return startError;
233+ }
234+
235+ #ifndef QT_NO_SAMPLES
236+ int wd_samples_setup (webdriver::ViewCreator* widgetCreator,
237+ webdriver::ViewCreator* webCreator,
238+ webdriver::ViewCreator* qmlCreator,
239+ CommandLine &cmd_line)
240+ {
241+ if (widgetCreator != NULL )
242+ {
243+ widgetCreator->RegisterViewClass <WindowTestWidget>(" WindowTestWidget" );
244+ widgetCreator->RegisterViewClass <ClickTestWidget>(" ClickTestWidget" );
245+ widgetCreator->RegisterViewClass <ElementAttributeTestWidget>(" ElementAttributeTestWidget" );
246+ widgetCreator->RegisterViewClass <FindingTestWidget>(" FindingTestWidget" );
247+ widgetCreator->RegisterViewClass <CoordinatesTestWidget>(" CoordinatesTestWidget" );
248+ widgetCreator->RegisterViewClass <ClickScrollingTestWidget>(" ClickScrollingTestWidget" );
249+ widgetCreator->RegisterViewClass <ElementSelectingTestWidget>(" ElementSelectingTestWidget" );
250+ widgetCreator->RegisterViewClass <TypingTestWidget>(" TypingTestWidget" );
251+ widgetCreator->RegisterViewClass <BasicKeyboardInterfaceTestWidget>(" BasicKeyboardInterfaceTestWidget" );
252+ widgetCreator->RegisterViewClass <TextHandlingTestWidget>(" TextHandlingTestWidget" );
253+ widgetCreator->RegisterViewClass <FormHandlingTestWidget>(" FormHandlingTestWidget" );
254+ widgetCreator->RegisterViewClass <XPathElementFindingTestWidget>(" XPathElementFindingTestWidget" );
255+ widgetCreator->RegisterViewClass <StaleElementReferenceTestWidget>(" StaleElementReferenceTestWidget" );
256+ widgetCreator->RegisterViewClass <VisibilityTestWidget>(" VisibilityTestWidget" );
257+ widgetCreator->RegisterViewClass <BasicMouseInterfaceTestWidget>(" BasicMouseInterfaceTestWidget" );
258+ widgetCreator->RegisterViewClass <TouchTestWidget>(" TouchTestWidget" );
259+ widgetCreator->RegisterViewClass <MenuTestWidget>(" MenuTestWidget" );
260+ #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
261+ widgetCreator->RegisterViewClass <WindowWithDeclarativeViewTestWidget>(" WindowWithDeclarativeViewTestWidget" );
262+ #endif
263+
264+ #if (1 == WD_ENABLE_PLAYER) && (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
265+ widgetCreator->RegisterViewClass <VideoTestWidget>(" VideoTestWidget" );
266+ #endif // WD_ENABLE_PLAYER
267+
268+ #if (WD_ENABLE_WEB_VIEW == 1)
269+ /* Register som test classes */
270+ widgetCreator->RegisterViewClass <GraphicsWebViewTestWindows>(" GraphicsWebViewTestWindows" );
271+ widgetCreator->RegisterViewClass <WindowWithEmbeddedViewTestWidget>(" WindowWithEmbeddedViewTestWidget" );
272+ widgetCreator->RegisterViewClass <WidgetAndWebViewTestWindows>(" WidgetAndWebViewTestWindows" );
273+
274+ #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
275+ widgetCreator->RegisterViewClass <WindowWithSeparatedDeclarativeAndWebViewsTestWidget>(" WindowWithSeparatedDeclarativeAndWebViewsTestWidget" );
276+ #endif // QT_VERSION
277+ #endif // WD_ENABLE_WEB_VIEW
278+ }
279+ #if (1 == WD_ENABLE_PLAYER) && (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
280+ // check if --test_data_folder CL argument is present
281+ std::string testDataFolderSwitch = " test_data_folder" ;
282+
283+ if (cmd_line.HasSwitch (testDataFolderSwitch)) {
284+ testDataFolder = cmd_line.GetSwitchValueASCII (testDataFolderSwitch);
285+ } else {
286+ testDataFolder = " ./" ;
287+ }
288+
289+ std::cout << " Using " << testDataFolder << " as test data folder" << std::endl;
290+ #endif // WD_ENABLE_PLAYER
291+ return 0 ;
292+ }
293+ #endif // QT_NO_SAMPLES
0 commit comments