10
10
from selenium import webdriver
11
11
from selenium .common .exceptions import NoSuchElementException
12
12
from selenium .webdriver .support .wait import WebDriverWait
13
- from selenium .webdriver .common .by import By
14
13
from selenium .webdriver .common .keys import Keys
15
14
from selenium .webdriver .common .action_chains import ActionChains
16
15
except ImportError :
24
23
from debug_toolbar .settings import PANELS_DEFAULTS
25
24
26
25
27
- @skipIf (webdriver is None , "selenium isn't installed" )
28
- @skipUnless ('DJANGO_SELENIUM_TESTS' in os .environ , "selenium tests not requested" )
29
- @override_settings (DEBUG = True , DEBUG_TOOLBAR_PANELS = PANELS_DEFAULTS + [
30
- 'debug_toolbar.panels.profiling.ProfilingPanel' ,
31
- ])
32
- class InitTestCase (LiveServerTestCase ):
33
-
26
+ class ToolbarTestCase (LiveServerTestCase ):
27
+ """Helper class that provides a few methods for fetching elements."""
34
28
@classmethod
35
29
def setUpClass (cls ):
36
- super (InitTestCase , cls ).setUpClass ()
30
+ super (ToolbarTestCase , cls ).setUpClass ()
37
31
cls .selenium = webdriver .Firefox ()
38
32
39
33
@classmethod
40
34
def tearDownClass (cls ):
41
35
cls .selenium .quit ()
42
- super (InitTestCase , cls ).tearDownClass ()
36
+ super (ToolbarTestCase , cls ).tearDownClass ()
43
37
44
38
def setUp (self ):
45
39
self .selenium .delete_all_cookies ()
46
40
self .selenium .get (self .live_server_url + '/execute_sql/' )
47
- self .panel_class = "HeadersPanel"
48
- self .panel_trigger = self .selenium .find_element (
49
- By .CSS_SELECTOR ,
50
- "#djDebugPanelList li a.{}" .format (self .panel_class )
41
+ self .get_web_driver_wait ().until (
42
+ lambda selenium :
43
+ self .get_panel_trigger ("HeadersPanel" ).is_displayed ()
51
44
)
52
- self .panel = self .selenium .find_element_by_id (self .panel_class )
53
- WebDriverWait (self .selenium , timeout = 10 ).until (
54
- lambda selenium : self .panel_trigger .is_displayed ())
45
+
46
+ def get_panel_trigger (self , name ):
47
+ return self .selenium .find_element_by_class_name (name )
48
+
49
+ def get_panel (self , name ):
50
+ return self .selenium .find_element_by_id (name )
51
+
52
+ def get_web_driver_wait (self ):
53
+ return WebDriverWait (self .selenium , timeout = 10 )
54
+
55
+
56
+ @skipIf (webdriver is None , "selenium isn't installed" )
57
+ @skipUnless (
58
+ 'DJANGO_SELENIUM_TESTS' in os .environ , "selenium tests not requested" )
59
+ @override_settings (DEBUG = True , DEBUG_TOOLBAR_PANELS = PANELS_DEFAULTS + [
60
+ 'debug_toolbar.panels.profiling.ProfilingPanel' ,
61
+ ])
62
+ class InitTestCase (ToolbarTestCase ):
55
63
56
64
def test_show_toolbar (self ):
57
65
toolbar = self .selenium .find_element_by_id ('djDebug' )
58
66
self .assertTrue (toolbar .is_displayed ())
59
67
60
68
def test_panel_li_a_click_once (self ):
61
- self .assertFalse (self .panel .is_displayed ())
62
- self .panel_trigger .click ()
63
- self .assertTrue (self .panel .is_displayed ())
69
+ panel_name = "HeadersPanel"
70
+ panel_trigger = self .get_panel_trigger (panel_name )
71
+ panel = self .get_panel (panel_name )
72
+ self .assertFalse (panel .is_displayed ())
73
+ panel_trigger .click ()
74
+ self .assertTrue (panel .is_displayed ())
64
75
65
76
# Verify that the panels parent had the djdt-active class added
66
77
trigger_count = self .selenium .execute_script (
67
78
"return djdt.jQuery('#djDebugToolbar').find('.djdt-active')"
68
- ".find('.{}').length" .format (self . panel_class )
79
+ ".find('.{}').length" .format (panel_name )
69
80
)
70
81
self .assertEquals (trigger_count , 1 )
71
82
72
83
def test_panel_li_a_click_twice (self ):
84
+ panel_name = "HeadersPanel"
85
+ panel_trigger = self .get_panel_trigger (panel_name )
86
+ panel = self .get_panel (panel_name )
73
87
# Click the trigger twice
74
- self . panel_trigger .click ()
75
- self . panel_trigger .click ()
88
+ panel_trigger .click ()
89
+ panel_trigger .click ()
76
90
# Verify that the panels parent had the djdt-active class removed
77
91
trigger_count = self .selenium .execute_script (
78
92
"return djdt.jQuery('#djDebugToolbar').find('.djdt-active')"
79
- ".find('.{}').length" .format (self . panel_class )
93
+ ".find('.{}').length" .format (panel_name )
80
94
)
81
95
self .assertEquals (trigger_count , 0 )
82
- self .assertFalse (self . panel .is_displayed ())
96
+ self .assertFalse (panel .is_displayed ())
83
97
84
98
def test_ajax_fail (self ):
99
+ panel_name = "HeadersPanel"
100
+ panel_trigger = self .get_panel_trigger (panel_name )
85
101
self .selenium .execute_script (
86
102
"djdt.jQuery('#djDebug').data('render-panel-url', '/test_fail/')"
87
103
)
88
104
debug_window = self .selenium .find_element_by_id ("djDebugWindow" )
89
105
self .assertFalse (debug_window .is_displayed ())
90
- self . panel_trigger .click ()
106
+ panel_trigger .click ()
91
107
self .assertTrue (debug_window .is_displayed ())
92
108
93
109
def test_dj_debug_close (self ):
110
+ panel_name = "HeadersPanel"
111
+ panel_trigger = self .get_panel_trigger (panel_name )
112
+ panel = self .get_panel (panel_name )
94
113
# Click a panel to set a djdt-active class
95
- self . panel_trigger .click ()
114
+ panel_trigger .click ()
96
115
active_panel_items = self .selenium .find_element_by_css_selector (
97
116
"#djDebugToolbar li.djdt-active" )
98
117
self .assertTrue (active_panel_items .is_displayed ())
99
- self . panel .find_element_by_css_selector (
118
+ panel .find_element_by_css_selector (
100
119
"#djDebug a.djDebugClose" ).click ()
101
120
self .assertRaises (
102
121
NoSuchElementException ,
@@ -105,10 +124,12 @@ def test_dj_debug_close(self):
105
124
)
106
125
107
126
def test_click_panel_button_checkbox (self ):
108
- checkbox = self .panel_trigger .find_element_by_xpath ('..' )\
127
+ panel_name = "HeadersPanel"
128
+ panel_trigger = self .get_panel_trigger (panel_name )
129
+ checkbox = panel_trigger .find_element_by_xpath ('..' )\
109
130
.find_element_by_css_selector ("input[type=checkbox]" )
110
131
cookie_name = checkbox .get_attribute ("data-cookie" )
111
- self .assertEquals (cookie_name , "djdt{}" .format (self . panel_class ))
132
+ self .assertEquals (cookie_name , "djdt{}" .format (panel_name ))
112
133
cookie = self .selenium .get_cookie (cookie_name )
113
134
self .assertIsNone (cookie )
114
135
# Click on the checkbox to turn off
@@ -127,20 +148,25 @@ def test_remote_class_click(self):
127
148
self .selenium .find_element_by_class_name (panel_name ).click ()
128
149
panel = self .selenium .find_element_by_id (panel_name )
129
150
130
- remote_call_trigger = WebDriverWait (self .selenium , timeout = 10 ).until (
131
- lambda selenium : panel .find_element_by_class_name ('remoteCall' ))
151
+ remote_call_trigger = self .get_web_driver_wait ().until (
152
+ lambda selenium : panel .find_element_by_class_name ('remoteCall' )
153
+ )
132
154
133
155
remote_call_trigger .click ()
134
156
debug_window = self .selenium .find_element_by_id ('djDebugWindow' )
135
157
if panel_name == 'TemplatesPanel' :
136
- code_section = WebDriverWait (self .selenium , timeout = 10 ).until (
137
- lambda selenium : debug_window .find_element_by_tag_name ('code' ))
158
+ code_section = self .get_web_driver_wait ().until (
159
+ lambda selenium :
160
+ debug_window .find_element_by_tag_name ('code' )
161
+ )
138
162
self .assertEquals (
139
163
"basic.html" , code_section .get_attribute ('innerHTML' )
140
164
)
141
165
elif panel_name == 'SQLPanel' :
142
- sql_select = WebDriverWait (self .selenium , timeout = 10 ).until (
143
- lambda selenium : debug_window .find_element_by_class_name ('djdt-scroll' ))
166
+ sql_select = self .get_web_driver_wait ().until (
167
+ lambda selenium :
168
+ debug_window .find_element_by_class_name ('djdt-scroll' )
169
+ )
144
170
self .assertIn (
145
171
"<dt>Executed SQL</dt>" ,
146
172
sql_select .get_attribute ('innerHTML' )
@@ -159,7 +185,8 @@ def test_toggle_switch_click(self):
159
185
self .selenium .find_element_by_class_name (panel_name ).click ()
160
186
panel = self .selenium .find_element_by_id (panel_name )
161
187
toggle_switch = panel .find_element_by_class_name ('djToggleSwitch' )
162
- id_javascript_selector = "return djdt.jQuery('#{}').find('.djToggleSwitch').attr('{}')"
188
+ id_javascript_selector = (
189
+ "return djdt.jQuery('#{}').find('.djToggleSwitch').attr('{}')" )
163
190
target_id = self .selenium .execute_script (
164
191
id_javascript_selector .format (panel_name , 'data-toggle-id' )
165
192
)
@@ -191,21 +218,25 @@ def test_toggle_switch_click(self):
191
218
)
192
219
193
220
def test_hide_toolbar_button (self ):
194
- self .assertTrue (self .panel_trigger .is_displayed ())
221
+ panel_name = "HeadersPanel"
222
+ panel_trigger = self .get_panel_trigger (panel_name )
223
+ self .assertTrue (panel_trigger .is_displayed ())
195
224
self .selenium .find_element_by_id ("djHideToolBarButton" ).click ()
196
- WebDriverWait ( self .selenium , timeout = 10 ).until (
197
- lambda selenium : not self . panel_trigger .is_displayed ())
225
+ self .get_web_driver_wait ( ).until (
226
+ lambda selenium : not panel_trigger .is_displayed ())
198
227
199
228
def test_show_toolbar_button (self ):
229
+ panel_name = "HeadersPanel"
230
+ panel_trigger = self .get_panel_trigger (panel_name )
200
231
self .selenium .find_element_by_id ("djHideToolBarButton" ).click ()
201
232
show_button = self .selenium .find_element_by_id ('djShowToolBarButton' )
202
233
self .assertTrue (show_button .is_displayed ())
203
- self .assertFalse (self . panel_trigger .is_displayed ())
234
+ self .assertFalse (panel_trigger .is_displayed ())
204
235
# Verify when the show button is clicked and held that it's not hidden.
205
236
ActionChains (self .selenium ).click_and_hold (show_button ).perform ()
206
237
self .assertTrue (show_button .is_displayed ())
207
238
show_button .click ()
208
- self .assertTrue (self . panel_trigger .is_displayed ())
239
+ self .assertTrue (panel_trigger .is_displayed ())
209
240
210
241
def test_move_show_toolbar_button (self ):
211
242
self .selenium .find_element_by_id ("djHideToolBarButton" ).click ()
@@ -225,8 +256,10 @@ def test_close_binding(self):
225
256
toolbar = self .selenium .find_element_by_id ('djDebugToolbar' )
226
257
self .selenium .find_element_by_class_name ('remoteCall' ).click ()
227
258
debug_window = self .selenium .find_element_by_id ('djDebugWindow' )
228
- WebDriverWait (self .selenium , timeout = 10 ).until (
229
- lambda selenium : debug_window .find_element_by_class_name ('djdt-scroll' ))
259
+ self .get_web_driver_wait ().until (
260
+ lambda selenium :
261
+ debug_window .find_element_by_class_name ('djdt-scroll' )
262
+ )
230
263
self .assertTrue (debug_window .is_displayed ())
231
264
# Verify the sql debug window is hidden on close
232
265
self .selenium .execute_script ('djdt.close()' )
@@ -240,7 +273,7 @@ def test_close_binding(self):
240
273
241
274
# Verify the sql debug window is hidden on click
242
275
self .selenium .execute_script ('djdt.close()' )
243
- WebDriverWait ( self .selenium , timeout = 10 ).until (
276
+ self .get_web_driver_wait ( ).until (
244
277
lambda selenium : not toolbar .is_displayed ())
245
278
self .assertFalse (sql_panel .is_displayed ())
246
279
@@ -252,66 +285,48 @@ def test_hidden_via_cookie(self):
252
285
self .assertTrue (
253
286
self .selenium .find_element_by_id ('djDebugToolbar' ).is_displayed ())
254
287
self .selenium .execute_script ('djdt.close()' )
255
- WebDriverWait ( self .selenium , timeout = 10 ).until (
288
+ self .get_web_driver_wait ( ).until (
256
289
lambda selenium :
257
290
selenium .find_element_by_id ('djShowToolBarButton' ).is_displayed ())
258
291
# Verify that when the page reloads that the toolbar is still closed.
259
292
self .selenium .refresh ()
260
293
self .assertFalse (
261
294
self .selenium .find_element_by_id ('djDebugToolbar' ).is_displayed ())
262
- self .assertTrue (
263
- self .selenium . find_element_by_id ( 'djShowToolBarButton' ) .is_displayed ())
295
+ show_button = self .selenium . find_element_by_id ( 'djShowToolBarButton' )
296
+ self .assertTrue ( show_button .is_displayed ())
264
297
265
298
266
299
@skipIf (webdriver is None , "selenium isn't installed" )
267
- @skipUnless ('DJANGO_SELENIUM_TESTS' in os .environ , "selenium tests not requested" )
300
+ @skipUnless (
301
+ 'DJANGO_SELENIUM_TESTS' in os .environ , "selenium tests not requested" )
268
302
@override_settings (DEBUG = True )
269
- class APITestCase (LiveServerTestCase ):
270
-
271
- @classmethod
272
- def setUpClass (cls ):
273
- super (APITestCase , cls ).setUpClass ()
274
- cls .selenium = webdriver .Firefox ()
275
-
276
- @classmethod
277
- def tearDownClass (cls ):
278
- cls .selenium .quit ()
279
- super (APITestCase , cls ).tearDownClass ()
280
-
281
- def setUp (self ):
282
- self .selenium .delete_all_cookies ()
283
- self .selenium .get (self .live_server_url + '/execute_sql/' )
284
- self .panel_class = "HeadersPanel"
285
- self .panel_trigger = self .selenium .find_element (
286
- By .CSS_SELECTOR ,
287
- "#djDebugPanelList li a.{}" .format (self .panel_class )
288
- )
289
- WebDriverWait (self .selenium , timeout = 10 ).until (
290
- lambda selenium : self .panel_trigger .is_displayed ())
303
+ class APITestCase (ToolbarTestCase ):
291
304
292
305
def test_show_toolbar (self ):
293
306
self .selenium .execute_script ("djdt.hide_toolbar(false)" )
294
307
# Verify that it closes the toolbar.
295
- self .assertTrue (WebDriverWait ( self .selenium , timeout = 10 ).until (
308
+ self .assertTrue (self .get_web_driver_wait ( ).until (
296
309
lambda selenium :
297
310
selenium .find_element_by_id ('djDebugToolbarHandle' ).is_displayed ())
298
311
)
299
312
self .selenium .execute_script ("djdt.show_toolbar(true)" )
300
- self .assertFalse (
301
- self .selenium .find_element_by_id ('djDebugToolbarHandle' ).is_displayed ()
302
- )
303
- self .assertTrue (WebDriverWait (self .selenium , timeout = 10 ).until (
313
+ handle = self .selenium .find_element_by_id ('djDebugToolbarHandle' )
314
+ self .assertFalse (handle .is_displayed ())
315
+ self .assertTrue (self .get_web_driver_wait ().until (
304
316
lambda selenium :
305
317
selenium .find_element_by_id ('djDebugToolbar' ).is_displayed ())
306
318
)
307
319
cookie = self .selenium .get_cookie ('djdt' )
308
320
self .assertEquals (cookie ['name' ], 'djdt' )
309
321
self .assertEquals (cookie ['value' ], 'show' )
310
322
action = ActionChains (self .selenium )
311
- action .key_down (Keys .ESCAPE , self .selenium .find_element_by_tag_name ('body' ))
323
+ action .key_down (
324
+ Keys .ESCAPE ,
325
+ self .selenium .find_element_by_tag_name ('body' )
326
+ )
312
327
action .perform ()
313
328
# Verify that it closes the toolbar.
314
- self .assertTrue (WebDriverWait ( self .selenium , timeout = 10 ).until (
329
+ self .assertTrue (self .get_web_driver_wait ( ).until (
315
330
lambda selenium :
316
331
selenium .find_element_by_id ('djDebugToolbarHandle' ).is_displayed ())
317
332
)
@@ -322,16 +337,18 @@ def test_hide_toolbar(self):
322
337
toolbar = self .selenium .find_element_by_id ('djDebugToolbar' )
323
338
self .selenium .find_element_by_class_name ('remoteCall' ).click ()
324
339
debug_window = self .selenium .find_element_by_id ('djDebugWindow' )
325
- WebDriverWait (self .selenium , timeout = 10 ).until (
326
- lambda selenium : debug_window .find_element_by_class_name ('djdt-scroll' ))
340
+ self .get_web_driver_wait ().until (
341
+ lambda selenium :
342
+ debug_window .find_element_by_class_name ('djdt-scroll' )
343
+ )
327
344
self .assertTrue (debug_window .is_displayed ())
328
345
329
346
# Hide the toolbar
330
347
self .selenium .execute_script ('djdt.hide_toolbar(false)' )
331
- self .assertTrue (WebDriverWait ( self .selenium , timeout = 10 ).until (
348
+ self .assertTrue (self .get_web_driver_wait ( ).until (
332
349
lambda selenium : not debug_window .is_displayed ())
333
350
)
334
- self .assertTrue (WebDriverWait ( self .selenium , timeout = 10 ).until (
351
+ self .assertTrue (self .get_web_driver_wait ( ).until (
335
352
lambda selenium : not toolbar .is_displayed ())
336
353
)
337
354
self .assertFalse (sql_panel .is_displayed ())
@@ -378,7 +395,8 @@ def test_cookie_set(self):
378
395
expires_lower_bound = timezone .now ().date () + timedelta (days = expires )
379
396
expires_upper_bound = expires_lower_bound + timedelta (days = 1 )
380
397
self .selenium .execute_script (
381
- "djdt.cookie.set('{}','{}',{{'path':'{}','expires':{},'domain':'{}'}})"
398
+ "djdt.cookie.set('{}','{}',"
399
+ "{{'path':'{}','expires':{},'domain':'{}'}})"
382
400
.format (key , value , path , expires , domain )
383
401
)
384
402
cookie = self .selenium .get_cookie (key )
0 commit comments