1from selenium.common.exceptions import TimeoutException
2from selenium.webdriver.common.by import By
3from selenium.webdriver.support import expected_conditions as EC
4from selenium.webdriver.support.ui import WebDriverWait
5from notebook.tests.selenium.utils import wait_for_selector
6
7restart_selectors = [
8    '#restart_kernel', '#restart_clear_output', '#restart_run_all'
9]
10notify_interaction = '#notification_kernel > span'
11
12shutdown_selector = '#shutdown_kernel'
13confirm_selector = '.btn-danger'
14cancel_selector = ".modal-footer button:first-of-type"
15
16
17def test_cancel_restart_or_shutdown(notebook):
18    """Click each of the restart options, then cancel the confirmation dialog"""
19    browser = notebook.browser
20    kernel_menu = browser.find_element_by_id('kernellink')
21
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()
26        WebDriverWait(browser, 3).until(
27            EC.invisibility_of_element((By.CSS_SELECTOR, '.modal-backdrop'))
28        )
29        assert notebook.is_kernel_running()
30
31
32def test_menu_items(notebook):
33    browser = notebook.browser
34    kernel_menu = browser.find_element_by_id('kernellink')
35
36    for menu_item in restart_selectors:
37        # Shutdown
38        kernel_menu.click()
39        wait_for_selector(browser, shutdown_selector, visible=True, single=True).click()
40
41        # Confirm shutdown
42        wait_for_selector(browser, confirm_selector, visible=True, single=True).click()
43
44        WebDriverWait(browser, 3).until(
45            lambda b: not notebook.is_kernel_running(),
46            message="Kernel did not shut down as expected"
47        )
48
49        # Restart
50        # Selenium can't click the menu while a modal dialog is fading out
51        WebDriverWait(browser, 3).until(
52            EC.invisibility_of_element((By.CSS_SELECTOR, '.modal-backdrop'))
53        )
54        kernel_menu.click()
55
56        wait_for_selector(browser, menu_item, visible=True, single=True).click()
57        WebDriverWait(browser, 10).until(
58            lambda b: notebook.is_kernel_running(),
59            message="Restart (%r) after shutdown did not start kernel" % menu_item
60        )
61