TiledViz
Loading...
Searching...
No Matches
modify_session_with_nodejs.py
1"""
2Modify TiledViz sessions with Selenium
3"""
4
5import os,sys,time
6import logging
7import argparse
8
9from selenium import webdriver
10from selenium.common.exceptions import NoSuchElementException
11from selenium.webdriver.common.keys import Keys
12from selenium.webdriver.support.ui import Select
13from selenium.webdriver.common.action_chains import ActionChains
14from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener
15from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
16
17LOGIN_="ddurandi"
18PASSWORD_="OtherP@ssw/31d"
19SESSION_="TestSession"
20NBTILESET_=1
21
22def parse_args(argv):
23 parser = argparse.ArgumentParser(
24 'From a (users,project,session) get tile_sets, tiles and connections tables and build a session json structure from TiledViz database.')
25 parser.add_argument('-l','--login', default=LOGIN_,
26 help='Login in TiledViz (default: '+LOGIN_+')')
27 parser.add_argument('-p', '--password', default=PASSWORD_,
28 help='User password (default: '+PASSWORD_+')')
29 parser.add_argument('-s', '--session', default=SESSION_,
30 help='TiledViz session (default: '+SESSION_+')')
31 parser.add_argument('-o', '--mysession', action='store_true',
32 help='Is it my own session.')
33 parser.add_argument('-i', '--invitedsession', action='store_true',
34 help='I am working with one of my invited session.)')
35 parser.add_argument('-n', '--nbtileset', default=NBTILESET_, type=int,
36 help='Number of tilesets to be modified (default: '+str(NBTILESET_)+')')
37 parser.add_argument('tilesetmodifs', nargs="*",
38 help='''
39 List of modifications : for each tileset
40 tileset name
41 path to nodes.js file (with filename)''')
42
43 args = parser.parse_args(argv[1:])
44 return args
45
46# # Wait Nsec after each call
47# Nsec = 4
48
49class MyListener(AbstractEventListener):
50 pass
51 # global Nsec
52 # def before_navigate_to(self, url, driver):
53 # print("Before navigate to %s" % url)
54 # def after_navigate_to(self, url, driver): #.get(self.URL)
55 # time.sleep(Nsec)
56 # print("After navigate to %s" % url)
57 # def after_click(self, url, driver):
58 # time.sleep(Nsec)
59 # print("After click to %s" % url)
60
61#URL = 'http://flaskdock:5000'
62
63# chrome_options = webdriver.ChromeOptions()
64# driver = webdriver.Chrome(chrome_options=chrome_options)
65
66URL = 'http://localhost:5000'
67try:
68 firefox_profile = webdriver.FirefoxProfile()
69 driver = webdriver.Firefox(firefox_profile=firefox_profile)
70except Exception as e:
71 print("erreur ",e.msg)
72
73finddriver = EventFiringWebDriver(driver, MyListener())
74
75args = parse_args(sys.argv)
76# if (args.enablejsonwrite):
77# print("Json output file enable :",args.jsonfile)
78
79driver.get(URL)
80assert "TiledViz" in driver.title
81
82driver.get_cookies()
83
84
85LoginPage = finddriver.find_element_by_xpath("//button[@name='buttonLogin']")
86LoginPage.click()
87assert "Login TiledViz" in driver.title
88
89testform={"username":args.login,"password":args.password}
90for t in testform:
91 inputElement = finddriver.find_element_by_id(t)
92 inputElement.clear()
93 inputElement.send_keys(testform[t])
94
95remember_me=finddriver.find_element_by_id("remember_me")
96remember_me.click()
97
98choose_session=finddriver.find_element_by_xpath("//input[@id='choice_project-1']")
99choose_session.click()
100
101el = finddriver.find_element_by_id("submit")
102el.click()
103
104assert "All projects/sessions TiledViz" in driver.title
105
106my_own_session=args.mysession
107if ( my_own_session ):
108 sessionfilter = finddriver.find_element_by_id("filter_chosen_project_session")
109 goButton = finddriver.find_element_by_id("Valid_chosen_project_session")
110 sessionfilter.click()
111else:
112 sessionfilter = finddriver.find_element_by_id("filter_chosen_session_invited")
113 goButton = finddriver.find_element_by_id("Valid_chosen_session_invited")
114 sessionfilter.click()
115
116sessionfilter.send_keys(args.session)
117goButton.click()
118
119edit_session = finddriver.find_element_by_xpath('//input[@value="Edit session before grid"]')
120edit_session.click()
121
122assert "Edit session TiledViz" in driver.title
123
124
125
126for ts in range(args.nbtileset):
127
128 idTileset=args.tilesetmodifs[2*ts]
129 print("Modifying Tileset "+idTileset)
130
131 choose_ts=finddriver.find_element_by_xpath("//label[contains(., '"+idTileset+"')]/input")
132 choose_ts.click()
133
134 #//form[@id='login-form']/input[@id='edit']
135 #edit_ts = finddriver.find_element_by_xpath('//input[@value="Edit session TiledViz"]')
136 edit_ts = finddriver.find_element_by_xpath("//form[@id='login-form']/input[@id='edit']")
137 edit_ts.click()
138
139 elem=finddriver.find_element_by_xpath("//textarea[@id='json_tiles_text']")
140 elem.clear()
141
142 #driver.findElement(By.cssSelector("body")).sendKeys(Keys.chord(Keys.CONTROL, "a"));
143 #driver.findElement(By.xpath("//body")).sendKeys(Keys.chord(Keys.CONTROL, "a"));
144
145 # elem.send_keys("{\"nodes\": [ \n {\n \"url\": \"https://upload\"IdLocation\": -1} ]}")
146 # elem.send_keys(Keys.ENTER)
147 jsfile=args.tilesetmodifs[2*ts+1]
148 try:
149 fdfile=open(jsfile)
150 except Exception as e :
151 print("Can't open file "+jsfile)
152 break;
153 data=fdfile.read()
154 driver.execute_script("var textnode = document.getElementById('json_tiles_text'); "+
155 "textnode.value = arguments[0];",
156 data);
157 el = finddriver.find_element_by_id("submit")
158 el.click()
159 time.sleep(1)
160
161driver.quit()