Skip to content

Commit 92db6a7

Browse files
committed
Simplify test for shutting down & restarting kernel through the menus
1 parent 36e14ef commit 92db6a7

File tree

2 files changed

+34
-55
lines changed

2 files changed

+34
-55
lines changed

notebook/templates/notebook.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,8 @@
255255
</li>
256256
</ul>
257257
</li>
258-
<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">{% trans %}Kernel{% endtrans %}</a>
259-
<ul id="kernel_menu" class="dropdown-menu">
258+
<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" id="kernellink">{% trans %}Kernel{% endtrans %}</a>
259+
<ul id="kernel_menu" class="dropdown-menu" aria-labelledby="kernellink">
260260
<li id="int_kernel"
261261
title="{% trans %}Send Keyboard Interrupt (CTRL-C) to the Kernel{% endtrans %}">
262262
<a href="#">{% trans %}Interrupt{% endtrans %}</a>
Lines changed: 32 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,58 @@
1-
'''
2-
Test that the kernel disconnects and re-connects
3-
when shutdown then restarted
4-
'''
5-
61
from selenium.common.exceptions import TimeoutException
72
from selenium.webdriver.common.by import By
83
from selenium.webdriver.support import expected_conditions as EC
94
from selenium.webdriver.support.ui import WebDriverWait
105
from 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+
]
1410
notify_interaction = '#notification_kernel > span'
1511

16-
shutdown_selector = menu_items.pop()
12+
shutdown_selector = '#shutdown_kernel'
1713
confirm_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

5132
def 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

Comments
 (0)