From 36e14efa93b464ee58373d0da87cb183e1018ed9 Mon Sep 17 00:00:00 2001 From: Tres DuBiel Date: Sat, 13 Oct 2018 22:18:39 -0500 Subject: [PATCH 1/4] Translated kernel menu javascript test to selenium --- notebook/tests/notebook/kernel_menu.js | 44 ------------ notebook/tests/selenium/test_kernel_menu.py | 79 +++++++++++++++++++++ 2 files changed, 79 insertions(+), 44 deletions(-) delete mode 100644 notebook/tests/notebook/kernel_menu.js create mode 100644 notebook/tests/selenium/test_kernel_menu.py diff --git a/notebook/tests/notebook/kernel_menu.js b/notebook/tests/notebook/kernel_menu.js deleted file mode 100644 index f4db96cabd..0000000000 --- a/notebook/tests/notebook/kernel_menu.js +++ /dev/null @@ -1,44 +0,0 @@ - -casper.notebook_test(function () { - var that = this; - - var menuItems = ['#restart_kernel', '#restart_clear_output', '#restart_run_all', '#shutdown_kernel'] - var cancelSelector = ".modal-footer button:first-of-type" - - menuItems.forEach( function(selector) { - that.thenClick(selector); - that.waitForSelector(cancelSelector); - that.thenClick(cancelSelector); - - that.waitWhileSelector(".modal-content", function() { - that.test.assert(true, selector + " confirmation modal pops up and is cancelable"); - }); - }); - - var shutdownSelector = menuItems.pop(); - var confirmSelector = ".modal-footer .btn-danger" - - menuItems.forEach( function(selector) { - that.thenClick(shutdownSelector); - that.waitForSelector(confirmSelector); - that.thenClick(confirmSelector); - - // wait for shutdown to go through - that.waitFor(function() { return this.evaluate(function() { - return IPython.notebook.kernel.is_connected() === false; - })}); - - // Click on one of the restarts - that.thenClick(selector); - - // Kernel should get connected, no need for confirmation. - that.waitFor(function() { return this.evaluate(function() { - return IPython.notebook.kernel.is_connected() === true; - })}); - that.then(function() { - that.test.assert(true, "no confirmation for " + selector + " after session shutdown") - }) - }); - -}); - diff --git a/notebook/tests/selenium/test_kernel_menu.py b/notebook/tests/selenium/test_kernel_menu.py new file mode 100644 index 0000000000..0f0f881e69 --- /dev/null +++ b/notebook/tests/selenium/test_kernel_menu.py @@ -0,0 +1,79 @@ +''' +Test that the kernel disconnects and re-connects +when shutdown then restarted +''' + +from selenium.common.exceptions import TimeoutException +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.ui import WebDriverWait +from notebook.tests.selenium.utils import wait_for_selector + +kernel_menu_selector = '.dropdown:nth-child(5)' +menu_items = ['#restart_kernel', '#restart_clear_output', '#restart_run_all', '#shutdown_kernel'] +notify_interaction = '#notification_kernel > span' + +shutdown_selector = menu_items.pop() +confirm_selector = '.btn-danger' + +def check_kernel_shutdown(notebook): + browser = notebook.browser + + try: + WebDriverWait(browser, 3).until( + EC.text_to_be_present_in_element( + (By.CSS_SELECTOR, notify_interaction), 'No kernel')) + except TimeoutException: + return False + return True + +def check_kernel_restart(notebook): + browser = notebook.browser + + try: + WebDriverWait(browser, 3).until( + EC.text_to_be_present_in_element( + (By.CSS_SELECTOR, notify_interaction), 'Kernel ready')) + except TimeoutException: + return False + return True + +def check_modal_still_open(notebook): + ''' + The shutdown confirmation modal seems to briefly reappear + after disappearing, then disappear for good. + Selenium kept throwing errors for element not being clickable + because it was obscured, even though we use WebDriverWait + ''' + browser = notebook.browser + return browser.find_elements_by_css_selector('.modal-backdrop') + +def test_menu_items(notebook): + browser = notebook.browser + kernel_menu = browser.find_element_by_link_text('Kernel') + + for menu_item_selector in menu_items: + WebDriverWait(browser, 3).until( + EC.element_to_be_clickable((By.CSS_SELECTOR, kernel_menu_selector))) + + kernel_menu.click() + browser.find_element_by_css_selector(shutdown_selector).click() + + wait_for_selector(browser, confirm_selector) + browser.find_element_by_css_selector(confirm_selector).click() + + WebDriverWait(browser, 3).until( + EC.element_to_be_clickable((By.CSS_SELECTOR, kernel_menu_selector))) + + while check_modal_still_open(notebook): + pass + + assert check_kernel_shutdown(notebook) + + WebDriverWait(browser, 3).until( + EC.element_to_be_clickable((By.CSS_SELECTOR, kernel_menu_selector))) + + kernel_menu.click() + browser.find_element_by_css_selector(menu_item_selector).click() + + assert check_kernel_restart(notebook) \ No newline at end of file From 92db6a727c06c420414625d258b0580ffe175ccd Mon Sep 17 00:00:00 2001 From: Thomas Kluyver Date: Fri, 8 Nov 2019 12:26:31 +0000 Subject: [PATCH 2/4] Simplify test for shutting down & restarting kernel through the menus --- notebook/templates/notebook.html | 4 +- notebook/tests/selenium/test_kernel_menu.py | 85 ++++++++------------- 2 files changed, 34 insertions(+), 55 deletions(-) diff --git a/notebook/templates/notebook.html b/notebook/templates/notebook.html index 48f04bd2b6..99f6801159 100644 --- a/notebook/templates/notebook.html +++ b/notebook/templates/notebook.html @@ -255,8 +255,8 @@ -