1+ '''
2+ Test that the kernel disconnects and re-connects
3+ when shutdown then restarted
4+ '''
5+
6+ from selenium .common .exceptions import TimeoutException
7+ from selenium .webdriver .common .by import By
8+ from selenium .webdriver .support import expected_conditions as EC
9+ from selenium .webdriver .support .ui import WebDriverWait
10+ from notebook .tests .selenium .utils import wait_for_selector
11+
12+ kernel_menu_selector = '.dropdown:nth-child(5)'
13+ menu_items = ['#restart_kernel' , '#restart_clear_output' , '#restart_run_all' , '#shutdown_kernel' ]
14+ notify_interaction = '#notification_kernel > span'
15+
16+ shutdown_selector = menu_items .pop ()
17+ confirm_selector = '.btn-danger'
18+
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
29+
30+ def check_kernel_restart (notebook ):
31+ browser = notebook .browser
32+
33+ try :
34+ 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
40+
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' )
50+
51+ def test_menu_items (notebook ):
52+ 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 )))
58+
59+ kernel_menu .click ()
60+ browser .find_element_by_css_selector (shutdown_selector ).click ()
61+
62+ wait_for_selector (browser , confirm_selector )
63+ browser .find_element_by_css_selector (confirm_selector ).click ()
64+
65+ 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 )
72+
73+ 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 ()
78+
79+ assert check_kernel_restart (notebook )
0 commit comments