def g_click_on_provider_in_sidebar(selenium, browser_id_list, providers): browser_ids = parse_seq(browser_id_list) providers = parse_seq(providers) for browser_id, provider in izip_longest(browser_ids, providers, fillvalue=providers[-1]): driver = selenium[browser_id] _click_on_provider(driver, provider)
def g_click_on_provider_in_sidebar(selenium, browser_id_list, providers): browser_ids = parse_seq(browser_id_list) providers = parse_seq(providers) for browser_id, provider in izip_longest(browser_ids, providers, fillvalue=providers[-1]): driver = selenium[browser_id] _click_on_provider(driver, provider)
def are_nav_tabs_for_metadata_panel_displayed(browser_id, tab_list, item_name, tmp_memory): browser = tmp_memory[browser_id]['file_browser'] nav = browser.get_metadata_for(item_name).navigation for tab in parse_seq(tab_list): assert getattr(nav, tab.lower()) is not None, \ 'no navigation tab {} found'.format(tab)
def assert_none_item_is_selected_in_file_browser(browser_id, item_list, tmp_memory): browser = tmp_memory[browser_id]['file_browser'] err_msg = 'item "{name}" is selected while it should not be' for item_name in parse_seq(item_list): item = browser[item_name] assert not item.is_selected(), err_msg.format(name=item_name)
def are_nav_tabs_for_metadata_panel_displayed(browser_id, tab_list, item_name, tmp_memory): browser = tmp_memory[browser_id]['file_browser'] nav = browser.get_metadata_for(item_name).navigation for tab in parse_seq(tab_list): assert getattr(nav, tab.lower()) is not None, \ 'no navigation tab {} found'.format(tab)
def assert_none_item_is_selected_in_file_browser(browser_id, item_list, tmp_memory): browser = tmp_memory[browser_id]['file_browser'] err_msg = 'item "{name}" is selected while it should not be' for item_name in parse_seq(item_list): item = browser[item_name] assert not item.is_selected(), err_msg.format(name=item_name)
def assert_btn_disabled_in_toolbar_in_data_tab_in_op(selenium, browser_id, btn_list, op_page): driver = selenium[browser_id] toolbar = op_page(driver).data.toolbar err_msg = '{} btn should be disabled but is not in toolbar in op data tab' for btn in parse_seq(btn_list): item = getattr(toolbar, transform(btn)) assert item.is_enabled() is False, err_msg.format(btn)
def assert_provider_chunks_in_data_distribution(selenium, browser_id, chunks, provider, modals): driver = selenium[browser_id] prov_rec = modals(driver).data_distribution.providers[provider] distribution = prov_rec.distribution size, _ = distribution.size displayed_chunks = distribution.chunks expected_chunks = parse_seq(chunks, pattern=r'\(.+?\)') assert len(displayed_chunks) == len(expected_chunks), \ 'displayed {} chunks instead of expected {}'.format(len(displayed_chunks), len(expected_chunks)) for chunk1, chunk2 in izip(displayed_chunks, expected_chunks): assert all(round(x - z) == 0 for x, z in izip(chunk1, parse_seq(chunk2, pattern='\d+', default=int))), \ 'displayed chunk {} instead of expected {}'.format(chunk1, chunk2)
def assert_items_absence_in_file_browser(selenium, browser_id, item_list, tmp_memory): driver = selenium[browser_id] browser = tmp_memory[browser_id]['file_browser'] with implicit_wait(driver, 0.1, SELENIUM_IMPLICIT_WAIT): for item_name in parse_seq(item_list): with pytest.raises(RuntimeError): _ = browser[item_name]
def _not_in_sidebar_list(driver, items_names, items_type, items=None): items = items if items else _get_items_from_sidebar_list(driver, items_type) for item_name in parse_seq(items_names): item = items.get(item_name) if item: return False return True
def assert_provider_chunks_in_file_distribution(selenium, browser_id, chunks, provider, modals): driver = selenium[browser_id] prov_rec = modals(driver).file_distribution.providers[provider] distribution = prov_rec.distribution size, _ = distribution.size displayed_chunks = distribution.chunks expected_chunks = parse_seq(chunks, pattern=r'\(.+?\)') assert len(displayed_chunks) == len(expected_chunks), \ 'displayed {} chunks instead of expected {}'.format(len(displayed_chunks), len(expected_chunks)) for chunk1, chunk2 in izip(displayed_chunks, expected_chunks): assert all(round(x - z) == 0 for x, z in izip(chunk1, parse_seq(chunk2, pattern='\d+', default=int))), \ 'displayed chunk {} instead of expected {}'.format(chunk1, chunk2)
def _not_in_file_list(driver, items, items_type, file_list=None): file_list = file_list if file_list else _get_items_from_file_list(driver) icon = type_to_icon[items_type] for item_name in parse_seq(items): item = file_list.get(item_name) if item and icon in item[2].get_attribute('class'): return False return True
def click_tooltip_from_toolbar_in_data_tab_in_op(selenium, browser_id, btn_list, op_page): driver = selenium[browser_id] toolbar = op_page(driver).data.toolbar err_msg = '{} should be disabled but is not' for btn in parse_seq(btn_list): item = getattr(toolbar, transform(btn)) assert item.is_enabled() is True, err_msg.format(item)
def _not_in_file_list(driver, items, items_type, file_list=None): file_list = file_list if file_list else _get_items_from_file_list(driver) icon = type_to_icon[items_type] for item_name in parse_seq(items): item = file_list.get(item_name) if item and icon in item[2].get_attribute('class'): return False return True
def click_tooltip_from_toolbar_in_data_tab_in_op(selenium, browser_id, btn_list, op_page): driver = selenium[browser_id] toolbar = op_page(driver).data.toolbar err_msg = '{} btn should be disabled but is not in toolbar in op data tab' for btn in parse_seq(btn_list): item = getattr(toolbar, transform(btn)) assert item.is_enabled() is False, err_msg.format(btn)
def assert_items_absence_in_file_browser(selenium, browser_id, item_list, tmp_memory): driver = selenium[browser_id] browser = tmp_memory[browser_id]['file_browser'] with implicit_wait(driver, 0.1, SELENIUM_IMPLICIT_WAIT): for item_name in parse_seq(item_list): with pytest.raises(RuntimeError): _ = browser[item_name]
def assert_no_such_supporting_providers_for_space(selenium, browser_id, space, providers_list, oz_page): driver = selenium[browser_id] space_rec = oz_page(driver)['data space management'].spaces[space] providers = space_rec.providers err_msg = 'space named "{}" has supporting provider named "{{}}" ' \ 'while it should not have'.format(space) with implicit_wait(driver, 0.5, SELENIUM_IMPLICIT_WAIT): for provider in parse_seq(providers_list): assert provider not in providers, err_msg.format(provider)
def assert_no_such_supporting_providers_for_space(selenium, browser_id, space, providers_list, oz_page): driver = selenium[browser_id] space_rec = oz_page(driver)['data space management'].spaces[space] providers = space_rec.providers err_msg = 'space named "{}" has supporting provider named "{{}}" ' \ 'while it should not have'.format(space) with implicit_wait(driver, 0.5, SELENIUM_IMPLICIT_WAIT): for provider in parse_seq(providers_list): assert provider not in providers, err_msg.format(provider)
def _select_items_from_sidebar_list(driver, browser_id, tmp_memory, items_names, items_type, items=None): items = items if items else _get_items_from_sidebar_list(driver, items_type) for item_name in parse_seq(items_names): item = items.get(item_name) times = 10 while times > 0 and item and ('active' not in item.get_attribute('class')): item.click() tmp_memory[browser_id][items_type][item_name] = item time.sleep(1) times -= 1
def create_instances_of_webdriver(selenium, driver, browser_id_list, tmpdir, tmp_memory, driver_kwargs, driver_type, firefox_logging, firefox_path, xvfb, screen_width, screen_height, displays): for browser_id, display in zip(parse_seq(browser_id_list), cycle(xvfb)): if browser_id in selenium: raise AttributeError('{:s} already in use'.format(browser_id)) else: tmp_memory[browser_id] = { 'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': { 'modal': None } } with redirect_display(display): temp_dir = str(tmpdir) download_dir = os.path.join(temp_dir, browser_id, 'download') if driver_type.lower() == 'chrome': option_keys = driver_kwargs['desired_capabilities'].keys() option_key = [ x for x in option_keys if x.endswith('chromeOptions') ][-1] options = driver_kwargs['desired_capabilities'][option_key] prefs = {"download.default_directory": download_dir} options['prefs'].update(prefs) elif driver_type.lower() == 'firefox': options = Options() profile = FirefoxProfile() log_path = _set_firefox_profile(profile, browser_id, temp_dir, firefox_logging) options.profile = profile if firefox_path is not None: options.binary = FirefoxBinary(firefox_path) driver_kwargs['firefox_options'] = options browser = driver(driver_kwargs) if driver_type.lower() == 'firefox' and firefox_logging: browser.get_log = _firefox_logger(log_path) _config_driver(browser, screen_width, screen_height) displays[browser_id] = display selenium[browser_id] = browser
def assert_supporting_providers_for_space_in_panel(selenium, browser_id, name, providers_list, oz_page): driver = selenium[browser_id] space_rec = oz_page(driver)['data space management'].spaces[name] providers = space_rec.providers expected_providers = set(parse_seq(providers_list)) assert providers.count() == len(expected_providers), \ 'Expected number of providers {} does not match ' \ 'actual {}'.format(len(expected_providers), providers.count()) err_msg = 'space named "{name}" does not have supporting provider ' \ 'named "{{}}" while it should'.format(name=name) for provider in expected_providers: assert provider in providers, err_msg.format(provider)
def assert_supporting_providers_for_space_in_panel(selenium, browser_id, name, providers_list, oz_page): driver = selenium[browser_id] space_rec = oz_page(driver)['data space management'].spaces[name] providers = space_rec.providers expected_providers = set(parse_seq(providers_list)) assert providers.count() == len(expected_providers), \ 'Expected number of providers {} does not match ' \ 'actual {}'.format(len(expected_providers), providers.count()) err_msg = 'space named "{name}" does not have supporting provider ' \ 'named "{{}}" while it should'.format(name=name) for provider in expected_providers: assert provider in providers, err_msg.format(provider)
def assert_presence_in_file_browser_with_order(browser_id, item_list, tmp_memory): browser = tmp_memory[browser_id]['file_browser'] items = iter(parse_seq(item_list)) curr_item = next(items) for item in browser: if item.name == curr_item: try: curr_item = next(items) except StopIteration: return raise RuntimeError('item(s) not in browser or not in specified order ' '{order} starting from {item}'.format(order=item_list, item=curr_item))
def assert_presence_in_file_browser_with_order(browser_id, item_list, tmp_memory): browser = tmp_memory[browser_id]['file_browser'] items = iter(parse_seq(item_list)) curr_item = next(items) for item in browser: if item.name == curr_item: try: curr_item = next(items) except StopIteration: return raise RuntimeError('item(s) not in browser or not in specified order ' '{order} starting from {item}'.format(order=item_list, item=curr_item))
def _select_items_from_file_list_upon_cond(driver, item_list, keys, cond=_is_file_selected, all_items=None): all_items = all_items if all_items else _get_items_from_file_list(driver) actions = ActionChains(driver) for key in keys: actions.key_down(key) for item_name in parse_seq(item_list): item = all_items.get(item_name) if cond(item): actions.click(item[0]) for key in keys: actions.key_up(key) actions.perform()
def _select_items_from_file_list_upon_cond(driver, item_list, keys, cond=_is_file_selected, all_items=None): all_items = all_items if all_items else _get_items_from_file_list(driver) actions = ActionChains(driver) for key in keys: actions.key_down(key) for item_name in parse_seq(item_list): item = all_items.get(item_name) if cond(item): actions.click(item[0]) for key in keys: actions.key_up(key) actions.perform()
def kill_providers(persistent_environment, provider_list): kill_cmd = ['docker', 'kill'] inspect_cmd = ['docker', 'inspect', '-f', '{{.State.Running}}'] for provider in parse_seq(provider_list): for node in persistent_environment["op_worker_nodes"]: if provider in node: container_name = node.split('@')[1] subprocess.call(kill_cmd + [container_name]) for _ in xrange(10): is_alive = subprocess.Popen(inspect_cmd + [container_name], stdout=subprocess.PIPE) with suppress(Exception): if is_alive.communicate()[0] == 'false\n': break time.sleep(1) else: raise RuntimeError('container {} still alive, while it ' 'should not be'.format(container_name))
def kill_providers(persistent_environment, provider_list): kill_cmd = ['docker', 'kill'] inspect_cmd = ['docker', 'inspect', '-f', '{{.State.Running}}'] for provider in parse_seq(provider_list): for node in persistent_environment["op_worker_nodes"]: if provider in node: container_name = node.split('@')[1] subprocess.call(kill_cmd + [container_name]) for _ in xrange(10): is_alive = subprocess.Popen(inspect_cmd + [container_name], stdout=subprocess.PIPE) with suppress(Exception): if is_alive.communicate()[0] == 'false\n': break time.sleep(1) else: raise RuntimeError('container {} still alive, while it ' 'should not be'.format(container_name))
def create_instances_of_webdriver(selenium, driver, browser_id_list, tmpdir, tmp_memory, driver_kwargs, driver_type, firefox_logging, firefox_path, xvfb, screen_width, screen_height, displays): for browser_id, display in zip(parse_seq(browser_id_list), cycle(xvfb)): if browser_id in selenium: raise AttributeError('{:s} already in use'.format(browser_id)) else: tmp_memory[browser_id] = {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}} with redirect_display(display): temp_dir = str(tmpdir) download_dir = os.path.join(temp_dir, browser_id, 'download') if driver_type.lower() == 'chrome': options = driver_kwargs['desired_capabilities']['chromeOptions'] prefs = {"download.default_directory": download_dir} options['prefs'].update(prefs) elif driver_type.lower() == 'firefox': options = Options() profile = FirefoxProfile() log_path = _set_firefox_profile(profile, browser_id, temp_dir, firefox_logging) options.profile = profile if firefox_path is not None: options.binary = FirefoxBinary(firefox_path) driver_kwargs['firefox_options'] = options browser = driver(driver_kwargs) if driver_type.lower() == 'firefox' and firefox_logging: browser.get_log = _firefox_logger(log_path) _config_driver(browser, screen_width, screen_height) displays[browser_id] = display selenium[browser_id] = browser
def _wait_for_op_session_to_start(selenium, browser_id_list): def _check_url(): try: found = parse_url(driver.current_url).group('access') except AttributeError: return False else: return 'onedata' == found.lower() for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] # because of current subscription it is necessary # to wait under certain circumstances for things to properly work time.sleep(12) driver.get(parse_url(driver.current_url).group('base_url')) # TODO rm *4 when provider session starts becomes faster Wait(driver, WAIT_BACKEND * 4).until(lambda _: _check_url(), message='waiting for session to start')
def _wait_for_op_session_to_start(selenium, browser_id_list): def _check_url(): try: found = parse_url(driver.current_url).group('access') except AttributeError: return False else: return 'onedata' == found.lower() for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] # because of current subscription it is necessary # to wait under certain circumstances for things to properly work time.sleep(12) driver.get(parse_url(driver.current_url).group('base_url')) # TODO rm *4 when provider session starts becomes faster Wait(driver, WAIT_BACKEND*4).until( lambda _: _check_url(), message='waiting for session to start' )
def send_copied_item_to_other_users(browser_id, item_type, browser_list, tmp_memory, displays, clipboard): item = clipboard.paste(display=displays[browser_id]) for browser in parse_seq(browser_list): tmp_memory[browser]['mailbox'][item_type.lower()] = item
def wt_click_on_link_with_text(selenium, browser_id_list, link_name): for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] driver.find_element_by_link_text(link_name).click()
def link_with_text_present(selenium, browser_id, links_names): driver = selenium[browser_id] for name in parse_seq(links_names): assert driver.find_element_by_link_text(name), \ '{} link not found'.format(name)
def g_visit_onezone(base_url, selenium, browser_id_list): for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] driver.get(base_url)
def assert_items_presence_in_file_browser(browser_id, item_list, tmp_memory): browser = tmp_memory[browser_id]['file_browser'] for item_name in parse_seq(item_list): _ = browser[item_name]
def log_to_user_in_each_browser(selenium, browser_id_list, user_id_list): for browser_id, user_id in zip(parse_seq(browser_id_list), parse_seq(user_id_list)): driver = selenium[browser_id] driver.find_element_by_link_text(user_id).click()
def g_visit_onezone(base_url, selenium, browser_id_list): for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] driver.get(base_url)
def wt_click_on_link_with_text(selenium, browser_id_list, link_name): for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] driver.find_element_by_link_text(link_name).click()
def w_click_login_provider_button(selenium, browser_id_list, provider_name): for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] _click_login_provider_button(driver, provider_name)
def assert_items_presence_in_file_browser(browser_id, item_list, tmp_memory): browser = tmp_memory[browser_id]['file_browser'] for item_name in parse_seq(item_list): _ = browser[item_name]
def _deselect_files(browser, selector, item_list): for item_name in parse_seq(item_list): item = browser[item_name] if item.is_selected(): selector.select(item)
def send_copied_item_to_other_users(browser_id, item_type, browser_list, tmp_memory, displays, clipboard): item = clipboard.paste(display=displays[browser_id]) for browser in parse_seq(browser_list): tmp_memory[browser]['mailbox'][item_type.lower()] = item
def w_click_login_provider_button(selenium, browser_id_list, provider_name): for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] _click_login_provider_button(driver, provider_name)
def link_with_text_present(selenium, browser_id, links_names): driver = selenium[browser_id] for name in parse_seq(links_names): assert driver.find_element_by_link_text(name), \ '{} link not found'.format(name)
def log_to_user_in_each_browser(selenium, browser_id_list, user_id_list): for browser_id, user_id in zip(parse_seq(browser_id_list), parse_seq(user_id_list)): driver = selenium[browser_id] driver.find_element_by_link_text(user_id).click()
def _deselect_files(browser, selector, item_list): for item_name in parse_seq(item_list): item = browser[item_name] if item.is_selected(): selector.select(item)
def wt_click_on_the_given_main_menu_tab(selenium, browser_id_list, main_menu_tab): for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] _click_on_tab_in_main_menu_sidebar(driver, main_menu_tab)
def wt_click_on_the_given_main_menu_tab(selenium, browser_id_list, main_menu_tab): for browser_id in parse_seq(browser_id_list): driver = selenium[browser_id] _click_on_tab_in_main_menu_sidebar(driver, main_menu_tab)