예제 #1
0
class BaseTestCase(unittest.TestCase):
    '''
    Following env variable should be set:
    BROWSER_MODE: '--foreground' or '--headless'
    BROWSER_TYPE: 'chrome' or 'firefox'
    BROWSER_DRIVER: full path to your browser driver (chromedriver or geckodriver)
    If running with firefox on Linux, should also set:
       BROWSER_BINARY: full path to your firefox binary
    '''
    _delay = 0.1
    _wait_timeout = 10

    def setUp(self):
        self._download_dir = tempfile.mkdtemp()
        browser = os.getenv("BROWSER_TYPE", 'chrome')
        mode = os.getenv("BROWSER_MODE", '--headless')
        print("...browser: {b}".format(b=browser))
        print("...mode: {m}".format(m=mode))

        if mode == "--headless" and os.getenv("CIRCLECI"):
            print("...starting display since we are running in headless mode")
            display = Display(visible=0, size=(800, 600))
            display.start()

        if browser == 'chrome':
            self.setup_for_chrome(mode)
        elif browser == 'firefox':
            self.setup_for_firefox(mode)

        self.driver.implicitly_wait(self._wait_timeout)
        time.sleep(self._delay)

        utils = JupyterUtils()
        self.server = utils.get_server()
        self.main_page = MainPage(self.driver, self.server)
        self.left_side_bar = VcdatLeftSideBar(self.driver, None)
        self.file_browser = FileBrowser(self.driver, None)
        self.click_on_file_browser_home()

        self._test_notebook_file = "{t}.ipynb".format(t=self._testMethodName)
        self.notebook_page = NoteBookPage(self.driver, None)
        self.notebook_page.rename_notebook(self._test_notebook_file)

    def tearDown(self):
        print("...BaseTestCase.tearDown()...")
        self.main_page.shutdown_kernel()
        self.notebook_page.save_current_notebook()
        self.notebook_page.close_current_notebook()
        self.driver.quit()
        os.remove(self._test_notebook_file)

    def setup_for_chrome(self, mode):
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument(mode)
        chrome_options.add_argument("--no-sandbox")
        chrome_options.add_argument("window-size=1200x600")
        self.driver = webdriver.Chrome(
            executable_path=os.getenv("BROWSER_BINARY",
                                      "/usr/local/bin/chromedriver"),
            chrome_options=chrome_options,
            service_args=['--verbose', '--log-path=/tmp/chromedriver.log'])

    def setup_for_firefox(self, mode):
        firefox_profile = FirefoxProfile()
        firefox_profile.set_preference('dom.disable_open_during_load', False)
        firefox_capabilities = DesiredCapabilities().FIREFOX
        firefox_capabilities['marionette'] = True
        firefox_capabilities['moz:firefoxOptions'] = {'args': ['--headless']}

        firefox_binary = FirefoxBinary(
            os.getenv("BROWSER_BINARY", "/usr/bin/firefox"))
        geckodriver_loc = os.getenv("BROWSER_DRIVER",
                                    "/usr/local/bin/geckodriver")
        self.driver = webdriver.Firefox(firefox_profile=firefox_profile,
                                        firefox_binary=firefox_binary,
                                        executable_path=geckodriver_loc,
                                        capabilities=firefox_capabilities)

    #
    # notebook utils
    #

    def close_notebook_if_any(self):
        try:
            note_book = NoteBookPage(self.driver)
            note_book.close()
            time.sleep(self._delay)
        except NoSuchElementException:
            print("No notebook opened")
            pass

    def close_current_notebook(self):
        self.main_page.close_current_notebook()

    #
    # Load a data file
    #

    def load_data_file(self, filename):
        # left_side_bar = VcdatLeftSideBar(self.driver, None)
        self.left_side_bar.click_on_jp_vcdat_icon()
        time.sleep(self._delay)
        self.left_side_bar.click_on_load_variables_by_file()

        # file_browser = FileBrowser(self.driver, None)
        self.file_browser.double_click_on_a_file(filename)
        time.sleep(self._delay)

    def load_sample_data(self, filename):
        # left_side_bar = VcdatLeftSideBar(self.driver, None)
        self.left_side_bar.click_on_jp_vcdat_icon()
        time.sleep(self._delay)
        self.left_side_bar.click_on_load_variables_by_file()

        # file_browser = FileBrowser(self.driver, None)
        self.click_on_file_browser_home()
        print("DEBUG DEBUG...returned from click_on_file_browser_home...")
        time.sleep(5)
        if "/" in filename:
            paths = filename.split('/')
            for f in paths[:-1]:
                print("xxx double clicking on {f}".format(f=f))
                self.file_browser.double_click_on_a_file(f, False)
                time.sleep(self._delay)
            self.file_browser.double_click_on_a_file(paths[-1])
        time.sleep(self._delay)

    #
    #
    #
    def click_on_plot(self):
        self.left_side_bar.click_on_plot()

    def click_on_clear(self):
        self.left_side_bar.click_on_clear()

    def select_plot_type(self, plot_type):
        self.left_side_bar.select_plot_type(plot_type)

    #
    # kernel utils
    #
    def select_kernel(self):
        self.main_page.select_kernel()

    def click_on_file_browser_home(self):
        self.left_side_bar.click_on_file_folder()
        self.file_browser.click_on_home()

    #
    # download_sample_data
    #
    def download_sample_data(self):
        vp = "vcs_egg_path = pkg_resources.resource_filename(pkg_resources.Requirement.parse('vcs'), 'share/vcs')"
        download_code = [
            "import vcs", "import cdms2", "import cdat_info",
            "import pkg_resources", vp,
            "path = vcs_egg_path+'/sample_files.txt'",
            "cdat_info.download_sample_data_files(path,'sample_data')"
        ]
        self.notebook_page.enter_code_list(download_code)
예제 #2
0
class BaseTestCase(unittest.TestCase):

    _delay = 1
    _wait_timeout = 3
    # _test_notebook_file = 'test_jpvcdat.ipynb'

    def setUp(self):
        self._download_dir = tempfile.mkdtemp()
        browser = os.getenv("BROWSER_TYPE", 'chrome')
        mode = os.getenv("BROWSER_MODE", '--headless')
        print("...browser: {b}".format(b=browser))
        print("...mode: {m}".format(m=mode))

        if mode == "--headless" and os.getenv("CIRCLECI"):
            print("...starting display since we are running in headless mode")
            display = Display(visible=0, size=(800, 600))
            display.start()

        if browser == 'chrome':
            self.setup_for_chrome(mode)
        elif browser == 'firefox':
            self.setup_for_firefox(mode)

        self.driver.implicitly_wait(self._wait_timeout)
        time.sleep(self._delay)

        utils = JupyterUtils()
        self.server = utils.get_server()
        self.main_page = MainPage(self.driver, self.server)
        self._test_notebook_file = "{t}.ipynb".format(t=self._testMethodName)
        self.notebook_page = NoteBookPage(self.driver, None)
        self.notebook_page.rename_notebook(self._test_notebook_file)

    def tearDown(self):
        print("xxx xxx BaseTestCase.tearDown() xxx xxx")
        self.main_page.shutdown_kernel()
        self.notebook_page.close_current_notebook()
        self.driver.quit()
        os.remove(self._test_notebook_file)

    def setup_for_chrome(self, mode):
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument(mode)
        chrome_options.add_argument("--no-sandbox")
        chrome_options.add_argument("window-size=1200x600")
        self.driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",
                                       chrome_options=chrome_options,
                                       service_args=['--verbose', '--log-path=/tmp/chromedriver.log'])

    def setup_for_firefox(self, mode):
        firefox_profile = FirefoxProfile()
        firefox_profile.set_preference('extensions.logging.enabled', False)
        firefox_profile.set_preference('network.dns.disableIPv6', False)
        firefox_profile.set_preference('browser.download.dir', self._download_dir)
        firefox_profile.set_preference('browser.download.folderList', 2)
        firefox_profile.set_preference('browser.download.useDownloadDir', True)
        firefox_profile.set_preference('browser.download.panel.shown', False)
        firefox_profile.set_preference('browser.download.manager.showWhenStarting', False)
        firefox_profile.set_preference('browser.download.manager.showAlertOnComplete', False)
        firefox_capabilities = DesiredCapabilities().FIREFOX
        firefox_capabilities['marionette'] = True
        firefox_capabilities['moz:firefoxOptions'] = {'args': ['--headless']}
        options = Options()
        options.binary_location = "/usr/local/bin/geckodriver"
        firefox_binary = FirefoxBinary("/usr/local/bin/firefox")
        self.driver = webdriver.Firefox(firefox_profile=firefox_profile,
                                        firefox_binary=firefox_binary,
                                        executable_path="/usr/local/bin/geckodriver",
                                        options=options,
                                        capabilities=firefox_capabilities)

    #
    # notebook utils
    #

    def close_notebook_if_any(self):
        try:
            note_book = NoteBookPage(self.driver)
            note_book.close()
            time.sleep(self._delay)
        except NoSuchElementException:
            print("No notebook opened")
            pass

    def new_notebook(self, notebook_title):
        self.main_page.new_notebook()
        self.main_page.select_kernel()
        self.main_page.rename_notebook(notebook_title)

    def close_current_notebook(self):
        self.main_page.close_current_notebook()

    #
    # Load a data file
    #

    def load_data_file(self, filename):
        left_side_bar = VcdatLeftSideBar(self.driver, None)
        left_side_bar.click_on_jp_vcdat_icon()
        time.sleep(self._delay)
        left_side_bar.click_on_load_variables()

        file_browser = FileBrowser(self.driver, None)
        file_browser.double_click_on_a_file(filename)
        # self.main_page.select_kernel()
        time.sleep(self._delay)

        return left_side_bar

    #
    # kernel utils
    #
    def select_kernel(self):
        self.main_page.select_kernel()