1- '''
2- Test that the kernel disconnects and re-connects
3- when shutdown then restarted
4- '''
5-
61from selenium .common .exceptions import TimeoutException
72from selenium .webdriver .common .by import By
83from selenium .webdriver .support import expected_conditions as EC
94from selenium .webdriver .support .ui import WebDriverWait
105from notebook .tests .selenium .utils import wait_for_selector
116
12- kernel_menu_selector = '.dropdown:nth-child(5)'
13- menu_items = ['#restart_kernel' , '#restart_clear_output' , '#restart_run_all' , '#shutdown_kernel' ]
7+ restart_selectors = [
8+ '#restart_kernel' , '#restart_clear_output' , '#restart_run_all'
9+ ]
1410notify_interaction = '#notification_kernel > span'
1511
16- shutdown_selector = menu_items . pop ()
12+ shutdown_selector = '#shutdown_kernel'
1713confirm_selector = '.btn-danger'
14+ cancel_selector = ".modal-footer button:first-of-type"
1815
19- def check_kernel_shutdown (notebook ):
20- browser = notebook .browser
21-
22- try :
23- WebDriverWait (browser , 3 ).until (
24- EC .text_to_be_present_in_element (
25- (By .CSS_SELECTOR , notify_interaction ), 'No kernel' ))
26- except TimeoutException :
27- return False
28- return True
2916
30- def check_kernel_restart (notebook ):
17+ def test_cancel_restart_or_shutdown (notebook ):
18+ """Click each of the restart options, then cancel the confirmation dialog"""
3119 browser = notebook .browser
20+ kernel_menu = browser .find_element_by_id ('kernellink' )
3221
33- try :
22+ for menu_item in restart_selectors + [shutdown_selector ]:
23+ kernel_menu .click ()
24+ wait_for_selector (browser , menu_item , visible = True , single = True ).click ()
25+ wait_for_selector (browser , cancel_selector , visible = True , single = True ).click ()
3426 WebDriverWait (browser , 3 ).until (
35- EC .text_to_be_present_in_element (
36- (By .CSS_SELECTOR , notify_interaction ), 'Kernel ready' ))
37- except TimeoutException :
38- return False
39- return True
27+ EC .invisibility_of_element ((By .CSS_SELECTOR , '.modal-backdrop' ))
28+ )
29+ assert notebook .is_kernel_running ()
4030
41- def check_modal_still_open (notebook ):
42- '''
43- The shutdown confirmation modal seems to briefly reappear
44- after disappearing, then disappear for good.
45- Selenium kept throwing errors for element not being clickable
46- because it was obscured, even though we use WebDriverWait
47- '''
48- browser = notebook .browser
49- return browser .find_elements_by_css_selector ('.modal-backdrop' )
5031
5132def test_menu_items (notebook ):
5233 browser = notebook .browser
53- kernel_menu = browser .find_element_by_link_text ('Kernel' )
54-
55- for menu_item_selector in menu_items :
56- WebDriverWait (browser , 3 ).until (
57- EC .element_to_be_clickable ((By .CSS_SELECTOR , kernel_menu_selector )))
34+ kernel_menu = browser .find_element_by_id ('kernellink' )
5835
36+ for menu_item in restart_selectors :
37+ # Shutdown
5938 kernel_menu .click ()
60- browser . find_element_by_css_selector ( shutdown_selector ).click ()
39+ wait_for_selector ( browser , shutdown_selector , visible = True , single = True ).click ()
6140
62- wait_for_selector ( browser , confirm_selector )
63- browser . find_element_by_css_selector ( confirm_selector ).click ()
41+ # Confirm shutdown
42+ wait_for_selector ( browser , confirm_selector , visible = True , single = True ).click ()
6443
6544 WebDriverWait (browser , 3 ).until (
66- EC .element_to_be_clickable ((By .CSS_SELECTOR , kernel_menu_selector )))
67-
68- while check_modal_still_open (notebook ):
69- pass
70-
71- assert check_kernel_shutdown (notebook )
45+ lambda b : not notebook .is_kernel_running (),
46+ message = "Kernel did not shut down as expected"
47+ )
7248
49+ # Restart
50+ # Selenium can't click the menu while a modal dialog is fading out
7351 WebDriverWait (browser , 3 ).until (
74- EC .element_to_be_clickable ((By .CSS_SELECTOR , kernel_menu_selector )))
75-
76- kernel_menu .click ()
77- browser .find_element_by_css_selector (menu_item_selector ).click ()
52+ EC .element_to_be_clickable ((By .ID , 'kernellink' ))).click ()
7853
79- assert check_kernel_restart (notebook )
54+ wait_for_selector (browser , menu_item , visible = True , single = True ).click ()
55+ WebDriverWait (browser , 10 ).until (
56+ lambda b : notebook .is_kernel_running (),
57+ message = "Restart (%r) after shutdown did not start kernel" % menu_item
58+ )
0 commit comments