TiledViz
Loading...
Searching...
No Matches
test_script.py
1"""
2Test TiledViz with Selenium
3"""
4
5import unittest
6import os,sys,time
7import logging
8
9os.chdir("/tmp/tests")
10
11# from pyvirtualdisplay import Display
12
13from selenium import webdriver
14from selenium.common.exceptions import NoSuchElementException
15from selenium.webdriver.common.keys import Keys
16from selenium.webdriver.support.ui import Select
17from selenium.webdriver.common.action_chains import ActionChains
18from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener
19
20os.system("ls -la /usr/local/Selenium/")
21
22#logging.getLogger().setLevel(logging.INFO)
23
24# display = Display(visible=0, size=(1920, 1080))
25# display.start()
26
27# Wait Nsec after each call
28Nsec = 4
29
30class MyListener(AbstractEventListener):
31 global Nsec
32 def before_navigate_to(self, url, driver):
33 print("Before navigate to %s" % url)
34 def after_navigate_to(self, url, driver): #.get(self.URL)
35 time.sleep(Nsec)
36 print("After navigate to %s" % url)
37 def after_click(self, url, driver):
38 time.sleep(Nsec)
39 print("After click to %s" % url)
40
41
42class TestTemplate(unittest.TestCase):
43 """Include test cases on a given url"""
44
45 URL = 'http://flaskdock:5000'
46
47 def setUp(self):
48 """Start web driver"""
49 chrome_options = webdriver.ChromeOptions()
50 chrome_options.add_argument('--no-sandbox')
51 chrome_options.add_argument('--headless')
52 chrome_options.add_argument('--disable-gpu')
53 chrome_options.add_argument('--enable-logging')
54 chrome_options.add_argument('--enable-offline-auto-reload')
55 chrome_options.add_argument('--enable-offline-auto-reload-visible-only')
56 chrome_options.add_argument('--num-raster-threads=4')
57 chrome_options.add_argument('--enable-main-frame-before-activation')
58 chrome_options.add_argument('--enable-compositor-image-animations')
59
60 #chrome_options.add_experimental_option('prefs', {
61 # 'download.default_directory': os.getcwd(),
62 # 'download.prompt_for_download': False,
63 # })
64
65 # logging.info('Prepared chrome options..')
66 self.driver = webdriver.Chrome(options=chrome_options)
67
68 # firefox_profile = webdriver.FirefoxProfile()
69 # firefox_profile.set_preference('browser.download.folderList', 2)
70 # firefox_profile.set_preference('browser.download.manager.showWhenStarting', False)
71 # firefox_profile.set_preference('browser.download.dir', os.getcwd())
72 # firefox_profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv')
73
74 # # firefox_profile.set_preference("general.useragent.override", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1")
75 # # firefox_profile.set_preference("webdriver.log.file", "webdriver.log")
76
77 # logging.info('Prepared firefox profile..')
78
79 # self.driver = webdriver.Firefox(firefox_profile=firefox_profile)
80
81 self.driver.implicitly_wait(20)
82 self.driver.set_window_size(1920, 1080)
83 self.driver.maximize_window()
84
85 # zoomAction = ActionChains(self.driver)
86 # body = self.driver.find_element_by_tag_name('body')
87 # for i in range(6):
88 # zoomAction.send_keys_to_element(body,Keys.CONTROL,"-").perform() # +Keys.MINUS
89 # driver.get('chrome://settings/')
90 # driver.execute_script('chrome.settingsPrivate.setDefaultZoom(1.5);')
91 self.driver.execute_script("document.body.style.zoom='25%'")
92
93 self.finddriver = EventFiringWebDriver(self.driver, MyListener())
94
95 # logging.info('Initialized browser..')
96
97
98 def tearDown(self):
99 """Stop web driver"""
100 thedriver=self.driver
101 thedriver.quit()
102
103 def test_case_1(self):
104 """Connect to server"""
105 thedriver=self.driver
106 finddriver=self.finddriver
107 try:
108 time.sleep(Nsec)
109 thedriver.get(self.URL)
110 assert "TiledViz" in thedriver.title
111 thedriver.get_cookies()
112 #print("\nsource :",thedriver.page_source)
113 #assert "No results found." not in thedriver.page_source
114 except NoSuchElementException as ex:
115 self.fail(ex.msg+": \n"+thedriver.title)
116
117 def test_case_2(self):
118 """Find and click register button"""
119 thedriver=self.driver
120 finddriver=self.finddriver
121 try:
122 time.sleep(Nsec)
123 thedriver.get(self.URL)
124 el = finddriver.find_element_by_partial_link_text('Register')
125 #el = finddriver.find_element_by_xpath("//button[@name='buttonRregister']")
126 #el = finddriver.find_element_by_name('buttonRregister')
127 el.click()
128
129 except NoSuchElementException as ex:
130 self.fail(ex.msg+": \n"+thedriver.title)
131
132 def test_case_3(self):
133 """Find and click login more button"""
134 thedriver=self.driver
135 finddriver=self.finddriver
136 try:
137 time.sleep(Nsec)
138 thedriver.get(self.URL)
139 # thedriver.get(self.URL+'/login')
140 el = finddriver.find_element_by_partial_link_text('login')
141 el.click()
142
143 assert "Login TiledViz" in thedriver.title
144
145 el = finddriver.find_element_by_id("username")
146 #"//form[@id='loginForm']/input[1]")
147 el.clear()
148 el.send_keys("ddurandi")
149 el.send_keys(Keys.RETURN)
150 #el.send_keys(" and some", Keys.ARROW_DOWN)
151
152 inputElement = finddriver.find_element_by_id("password")
153 inputElement.clear()
154 inputElement.send_keys("OtherP@ssw/31d")
155 thedriver.save_screenshot('/tmp/tests/test-password1_screenshot.png')
156
157 # el = finddriver.find_element_by_xpath("//input[@name='password']")
158 # el.clear()
159 # el.send_keys("OtherP@ssw/31d")
160 # thedriver.save_screenshot('/tmp/tests/test-password2_screenshot.png')
161
162 el = finddriver.find_element_by_id("submit")
163 el.click()
164 #el = finddriver.find_element_by_partial_link_text('submit')
165
166 thedriver.save_screenshot('/tmp/tests/test-password3_screenshot.png')
167 assert "All projects/sessions TiledViz" in thedriver.title
168 except NoSuchElementException as ex:
169 self.fail(ex.msg+": \n"+thedriver.title)
170
171 def test_case_4(self):
172 """Register new user"""
173 thedriver=self.driver
174 finddriver=self.finddriver
175 try:
176 time.sleep(Nsec)
177 thedriver.get(self.URL+'/register')
178 assert "TiledViz register" in thedriver.title
179 testform={"username":"mmartin","password":"mvect22Y","email":"m.martin@gmel.com","compagny":"MaMDLS","manager":"MyBoss"}
180
181 for t in testform:
182 inputElement = finddriver.find_element_by_id(t)
183 inputElement.clear()
184 inputElement.send_keys(testform[t])
185 #thedriver.save_screenshot('/tmp/tests/test-registred_{}_screenshot.png'.format(t))
186
187 inputElement = finddriver.find_element_by_id("confirm")
188 inputElement.clear()
189 inputElement.send_keys(testform["password"])
190 thedriver.save_screenshot('/tmp/tests/test-registred_confirm_screenshot.png')
191
192 remember_me=self.finddriver.find_element_by_id("remember_me")
193 remember_me.click()
194
195 choice_project=self.finddriver.find_element_by_xpath('//input[@value="create"]')
196 choice_project.click()
197
198 thedriver.save_screenshot('/tmp/tests/test-registred1_screenshot.png')
199 el = finddriver.find_element_by_id("submit")
200 el.click()
201
202 thedriver.save_screenshot('/tmp/tests/test-registred2_screenshot.png')
203 assert "New project TiledViz" in thedriver.title
204
205 except NoSuchElementException as ex:
206 self.fail(ex.msg+": \n"+thedriver.title)
207
208
209 def test_case_5(self):
210 """An already registered user"""
211 thedriver=self.driver
212 finddriver=self.finddriver
213 try:
214 time.sleep(Nsec)
215 thedriver.get(self.URL+'/register')
216 assert "TiledViz register" in thedriver.title
217 testform={"username":"ddurandi","password":"OtherP@ssw/31d","email":"dany.durandi@gmel.com","compagny":"MaMDLS","manager":"MyBoss"}
218 for t in testform:
219 inputElement = finddriver.find_element_by_id(t)
220 inputElement.clear()
221 inputElement.send_keys(testform[t])
222
223 inputElement = finddriver.find_element_by_id("confirm")
224 inputElement.clear()
225 inputElement.send_keys(testform["password"])
226 thedriver.save_screenshot('/tmp/tests/test-registred_confirm_screenshot.png')
227
228 remember_me=self.finddriver.find_element_by_id("remember_me")
229 remember_me.click()
230
231 choice_project=self.finddriver.find_element_by_xpath('//input[@value="create"]')
232 choice_project.click()
233
234 thedriver.save_screenshot('/tmp/tests/test-already-registred1_screenshot.png')
235
236 el = finddriver.find_element_by_id("submit")
237 el.click()
238
239 thedriver.save_screenshot('/tmp/tests/test-already-registred2_screenshot.png')
240
241 assert "New project TiledViz" in thedriver.title
242
243 testform={"projectname":"CLIMAF","description":"This project already exists."}
244 for t in testform:
245 inputElement = finddriver.find_element_by_id(t)
246 inputElement.send_keys(testform[t])
247
248 choice_project=self.finddriver.find_element_by_xpath('//input[@value="use"]')
249 choice_project.click()
250 thedriver.save_screenshot('/tmp/tests/test-already-registred3_screenshot.png')
251
252 el = finddriver.find_element_by_id("submit")
253 el.click()
254
255 thedriver.save_screenshot('/tmp/tests/test-already-registred4_screenshot.png')
256
257 #assert "New project TiledViz" in thedriver.title
258
259 except NoSuchElementException as ex:
260 self.fail(ex.msg+": \n"+thedriver.title)
261
262 def test_case_6(self):
263 """Login and create a new project/session/tileset."""
264 thedriver=self.driver
265 finddriver=self.finddriver
266 try:
267 time.sleep(Nsec)
268 thedriver.get(self.URL)
269
270 LoginPage = finddriver.find_element_by_xpath("//button[@name='buttonLogin']")
271 LoginPage.click()
272 assert "Login TiledViz" in thedriver.title
273 testform={"username":"ddurandi","password":"OtherP@ssw/31d"}
274 for t in testform:
275 inputElement = finddriver.find_element_by_id(t)
276 inputElement.clear()
277 inputElement.send_keys(testform[t])
278
279 remember_me=self.finddriver.find_element_by_id("remember_me")
280 remember_me.click()
281
282 create_project=self.finddriver.find_element_by_xpath("//input[@id='choice_project-0']")
283 create_project.click()
284
285 el = finddriver.find_element_by_id("submit")
286 el.click()
287
288 assert "project" in thedriver.current_url
289
290 testform={"projectname":"TiledVizTEST","description":"Test for TiledViz with Wikimedia pictures"}
291 for t in testform:
292 inputElement = finddriver.find_element_by_id(t)
293 inputElement.clear()
294 inputElement.send_keys(testform[t])
295
296 thedriver.save_screenshot('/tmp/tests/test6-project_screenshot.png')
297
298 button=self.finddriver.find_element_by_xpath("//input[2][@id='submit']")
299 button.click()
300
301 button=self.finddriver.find_element_by_xpath("//div/input[@id='sessionname']")
302 button.click()
303
304 elem=self.finddriver.find_element_by_xpath("//input[@id='sessionname']")
305 elem.clear()
306 elem.send_keys("TestSelenium")
307 elem.send_keys(Keys.TAB)
308
309
310 button=self.finddriver.find_element_by_xpath("//div[2]/input[@id='description']")
311 button.click()
312
313 elem=self.finddriver.find_element_by_xpath("//input[@id='description']")
314 elem.clear()
315 elem.send_keys("Test Session for TiledViz with pictures")
316 elem.send_keys(Keys.TAB)
317
318 elem=self.finddriver.find_element_by_xpath("//input[@id='users-0']")
319 elem.clear()
320 elem.send_keys("ddurandi")
321 elem.send_keys(Keys.TAB)
322
323 elem=self.finddriver.find_element_by_xpath("//input[@id='users-1']")
324 elem.clear()
325 elem.send_keys("mmartial")
326 elem.send_keys(Keys.TAB)
327
328 thedriver.save_screenshot('/tmp/tests/test6-session1_screenshot.png')
329
330 button=self.finddriver.find_element_by_xpath("//input[3][@id='Session_config']")
331 button.click()
332
333 thedriver.save_screenshot('/tmp/tests/test6-session_config_screenshot.png')
334
335 # button=self.finddriver.find_element_by_xpath("//input[2][@id='editjson']")
336 # button.click()
337
338 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_session1_screenshot.png')
339
340 # button=self.finddriver.find_element_by_xpath("//tr[4]/td[3]/table/tbody/tr/td/button")
341 # button.click()
342
343 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_session2_screenshot.png')
344 # button=self.finddriver.find_element_by_xpath("//tr[8]/td[3]/table/tbody/tr/td/button")
345 # button.click()
346
347 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_session3_screenshot.png')
348 # button=self.finddriver.find_element_by_xpath("//tr[9]/td[3]/table/tbody/tr/td[4]/div")
349 # button.click()
350
351 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_session4_screenshot.png')
352 # button=self.finddriver.find_element_by_xpath("//tr[10]/td[3]/table/tbody/tr/td[4]/div")
353 # button.click()
354
355 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_session5_screenshot.png')
356 # button=self.finddriver.find_element_by_xpath("//tr[4]/td[3]/table/tbody/tr/td/button")
357 # button.click()
358
359 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_session6_screenshot.png')
360
361 # button=self.finddriver.find_element_by_xpath("//button[@id='submit']")
362 # button.click()
363
364 # thedriver.save_screenshot('/tmp/tests/test6-session2_screenshot.png')
365
366 button=self.finddriver.find_element_by_xpath("//input[3][@id='submit']")
367 button.click()
368
369 thedriver.save_screenshot('/tmp/tests/test6-session3_screenshot.png')
370
371 button=self.finddriver.find_element_by_xpath("//input[4][@id='submit']")
372 button.click()
373
374 elem=self.finddriver.find_element_by_xpath("//input[@id='name']")
375 elem.clear()
376 elem.send_keys("WikimediaTest")
377 elem.send_keys(Keys.TAB)
378
379 elem=self.finddriver.find_element_by_xpath("//input[@id='dataset_path']")
380 elem.clear()
381 elem.send_keys("upload.wikimedia.org")
382 elem.send_keys(Keys.TAB)
383
384 button=self.finddriver.find_element_by_xpath("//textarea[@id='json_tiles_text']")
385 button.click()
386
387 elem=self.finddriver.find_element_by_xpath("//textarea[@id='json_tiles_text']")
388 elem.clear()
389
390 # elem.send_keys("{\"nodes\": [ \n {...} ]}")
391 # elem.send_keys(Keys.ENTER)
392 jsfile="/usr/local/Selenium/TestSession.json"
393 try:
394 fdfile=open(jsfile)
395 except Exception as e :
396 print("Can't open file "+jsfile)
397 sys.exit(1)
398 data=fdfile.read()
399 thedriver.execute_script("var textnode = document.getElementById('json_tiles_text'); "+
400 "textnode.value = arguments[0];",
401 data);
402
403 thedriver.save_screenshot('/tmp/tests/test6-jsontext_screenshot.png')
404
405 # button=self.finddriver.find_element_by_xpath("//input[2][@id='editjson']")
406 # button.click()
407
408 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_tileset1_screenshot.png')
409
410 # button=self.finddriver.find_element_by_xpath("//tr[2]/td[3]/table/tbody/tr/td/button")
411 # button.click()
412
413 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_tileset2_screenshot.png')
414
415 # button=self.finddriver.find_element_by_xpath("//tr[5]/td[3]/table/tbody/tr/td/button")
416 # button.click()
417
418 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_tileset3_screenshot.png')
419
420 # button=self.finddriver.find_element_by_xpath("//tr[7]/td[3]/table/tbody/tr/td[4]/div")
421 # button.click()
422
423 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_tileset4_screenshot.png')
424
425 # button=self.finddriver.find_element_by_xpath("//button[@id='submit']")
426 # button.click()
427
428 # thedriver.save_screenshot('/tmp/tests/test6-jsoneditor_tileset5_screenshot.png')
429
430 button=self.finddriver.find_element_by_xpath("//input[3][@id='submit']")
431 button.click()
432
433 thedriver.save_screenshot('/tmp/tests/test6-end_build_session_screenshot.png')
434
435 except NoSuchElementException as ex:
436 self.fail(ex.msg+": \n"+thedriver.title)
437
438if __name__ == '__main__':
439 suite = unittest.TestLoader().loadTestsFromTestCase(TestTemplate)
440 result = unittest.TextTestRunner(verbosity=2).run(suite)
441 sys.exit(not result.wasSuccessful())