def test_advanced_autocomplete(self, driver, autocomplete_demo_page):

        autocomplete: ReactAutoComplete = None
        exp_value = 'Audi'

        with allure.step("Get advanced autocomplete"):
            autocomplete = autocomplete_demo_page.advanced_autocomplete

        with allure.step(
                "I click dropdown button in advanced autocomplete control"):
            autocomplete.expand()

        with allure.step("Autocomplete should became expanded"):
            allure.attach(driver.get_screenshot_as_png(),
                          name='screenshot',
                          attachment_type=allure.attachment_type.PNG)
            assert Helpers.wait_for(lambda: autocomplete.is_expanded, 10, 2)

        with allure.step("Select value '{}' in autocomplete dropdown".format(
                exp_value)):
            autocomplete.select_value(exp_value)

        with allure.step("Autocomplete should became collapsed"):
            allure.attach(driver.get_screenshot_as_png(),
                          name='screenshot',
                          attachment_type=allure.attachment_type.PNG)
            assert Helpers.wait_for(lambda: not autocomplete.is_expanded, 10,
                                    2)

        with allure.step(
                "Autocomplete control value should be '{}'".format(exp_value)):
            allure.attach(driver.get_screenshot_as_png(),
                          name='screenshot',
                          attachment_type=allure.attachment_type.PNG)
            assert autocomplete.value == exp_value
    def process_commandline(self, config):
        if config.getoption('headless'):
            self.headless = config.getoption("headless")

        if not (config.getoption('window_size') is None or config.getoption('window_size') == ''):
            self.win_size = Helpers.size(config.getoption('window_size'))

        if not (config.getoption('browser') is None or config.getoption('browser') == []):
            self.browsers_list = Helpers.get_browsers(config.getoption('browser'))
    def process_ini(self, config):
        self.headless = str2bool(config.getini("headless"))
        self.win_size = Helpers.size(config.getini('window_size'))
        # browser option from ini is 'str' (comma separated), so we need to split it
        self.browsers_list = Helpers.get_browsers(config.getini("browser").split(','))
        self.timeout = config.getini("default_wait_timeout")
        self.base_url = config.getini("base_url")

        # use selenoid
        self.use_selenoid = str2bool(config.getini("use_selenoid"))
        # use browserstack (have less priority than selenoid, so if used both - selenoid will be selected)
        self.use_browserstack = False if self.use_selenoid else str2bool(config.getini("use_browserstack"))
        self.hub_url = config.getini("hub_url")
Exemple #4
0
 def setUp(self):
     self.url = Config.login_url
     self.options = webdriver.ChromeOptions()
     self.options.add_experimental_option(
         "prefs", {
             "download.default_directory": Config.download_path,
             "download.prompt_for_download": False,
             "download.directory_upgrade": True,
             "safebrowsing.enabled": True
         })
     self.driver = webdriver.Chrome(chrome_options=self.options)
     self.driver.get(self.url)
     self.helpers = Helpers()
     self.helpers.set_no_primary_report()
    def test_basic_autocomplete(self, driver, autocomplete_demo_page, text,
                                value):

        autocomplete: ReactAutoComplete = None

        with allure.step("Get basic autocomplete"):
            autocomplete = autocomplete_demo_page.basic_autocomplete

        with allure.step(
                "start typing '{}' in basic autocomplete control".format(
                    text)):
            autocomplete.value = text

        with allure.step(
                "selected value '{}' in autocomplete dropdown".format(value)):
            autocomplete.select_value(value)

        with allure.step("Autocomplete should became collapsed"):
            allure.attach(driver.get_screenshot_as_png(),
                          name='screenshot',
                          attachment_type=allure.attachment_type.PNG)
            assert Helpers.wait_for(lambda: not autocomplete.is_expanded, 10,
                                    2)

        with allure.step(
                "Autocomplete control value should be '{}'".format(value)):
            allure.attach(driver.get_screenshot_as_png(),
                          name='screenshot',
                          attachment_type=allure.attachment_type.PNG)
            actual_val = autocomplete.value
            assert actual_val == value
 def set_defaults(self):
     self.headless = False
     self.win_size = Helpers.size("1600x900")
     self.browsers_list = ['chrome']
     self.timeout = 15
     self.base_url = ''
     self.use_selenoid = False
     self.use_browserstack = False
     self.hub_url = ''
Exemple #7
0
    def is_enabled(self):
        try:
            def func():
                e = self.find(1)
                return e.is_enabled()

            return Helpers.wait_for(func, 30, 3)

        except TimeoutException:
            return False
    def select_value(self, val: str):
        def find_item():
            global item
            list_element = self._list
            item_path = "./li[. = '{}']".format(val)

            try:
                item = list_element.find_element(By.XPATH, item_path)
                return True, item
            except:
                return False, None

        Helpers.wait_for(lambda: find_item()[0], 10, 1)
        res, item = find_item()

        if res:
            # workaround for SAFARI issue with click
            if self.driver.name.lower() == 'safari':
                self.driver.execute_script("arguments[0].click();", item)
            else:
                item.click()
Exemple #9
0
    def get_page_paragraphs_lines(self, page):
        page_paragraphs = []
        page_lines = []

        if 'regions' in page.keys():
            for para_region in page['regions']:
                if 'class' in para_region.keys(
                ) and 'regions' in para_region.keys():
                    if para_region['class'] == 'PARA':
                        lines = []
                        for line_region in para_region['regions']:
                            if 'class' in line_region.keys(
                            ) and 'regions' in line_region.keys():
                                if line_region['class'] == 'LINE':
                                    words = []
                                    for word_region in line_region['regions']:
                                        if 'class' in word_region.keys(
                                        ) and 'text' in word_region.keys():
                                            if word_region['class'] == 'WORD':
                                                words.append(
                                                    word_region['text'])

                                    lines.append(' '.join(words) + '\n')
                                    page_lines.append({
                                        'boundingBox':
                                        Helpers.vertices_to_boundingbox(
                                            line_region['boundingBox']
                                            ['vertices']),
                                        'text':
                                        ' '.join(words)
                                    })

                        page_paragraphs.append({
                            'boundingBox':
                            Helpers.vertices_to_boundingbox(
                                para_region['boundingBox']['vertices']),
                            'text':
                            ''.join(lines)
                        })
        return page_paragraphs, page_lines
Exemple #10
0
def start_page(driver, base_url):
    log.debug("start_page fixture created")

    _page = DemosPage(driver)
    _page.goto(base_url)

    # verify page header
    assert Helpers.wait_for(_page.header.text == "The Most Complete UI Framework", 50, 5,
                            title="Wait for page title: 'The Most Complete UI Framework'")

    yield _page

    del _page
    log.debug("start_page fixture destroyed")
Exemple #11
0
def checkbox_demo_page(start_page):
    log.debug("checkbox_page created")
    # goto Checkbox demo page
    start_page.sidebar.goto("Checkbox")
    _page = CheckboxPage(start_page.driver)

    # verify page header
    assert Helpers.wait_for(_page.header.text == "Checkbox",
                            50,
                            5,
                            title="Wait for page title: 'Checkbox'")

    yield _page

    del _page
    log.debug("checkbox_page fixture destroyed")
def autocomplete_demo_page(start_page):
    log.debug("autocomplete_page fixture created")
    # goto Autocomplete demo page
    start_page.sidebar.goto("AutoComplete")
    _page = AutoCompletePage(start_page.driver)

    # verify page header
    assert Helpers.wait_for(_page.header.text == "AutoComplete",
                            50,
                            5,
                            title="Wait for page title: 'Autocomplete'")

    yield _page

    del _page
    log.debug("autocomplete_page fixture destroyed")
Exemple #13
0
    def find_elements(self, locator):
        """
        Triyng to fing a sub-elements inside the current element
        :param locator: locator of sub-elements (relative to current element)
        :return: IWebElements collection or None in case element not found
        """
        e = self.find()

        def func():
            found_elements = None
            try:
                found_elements = e.find_elements(*locator)
            except:
                pass

            if found_elements is not None:
                return True

            return False

        if Helpers.wait_for(func, 60, 5):
            return e.find_elements(*locator)

        return None
Exemple #14
0
class LoginTestSuite(unittest.TestCase):
    def setUp(self):
        self.url = Config.login_url
        self.options = webdriver.ChromeOptions()
        self.options.add_experimental_option(
            "prefs", {
                "download.default_directory": Config.download_path,
                "download.prompt_for_download": False,
                "download.directory_upgrade": True,
                "safebrowsing.enabled": True
            })
        self.driver = webdriver.Chrome(chrome_options=self.options)
        self.driver.get(self.url)
        self.helpers = Helpers()
        self.helpers.set_no_primary_report()

    def tearDown(self) -> None:
        self.driver.quit()
        self.helpers.clear_download_folder()

    def login(self,
              email=Config.api_first_login,
              password=Config.api_password):
        login_page = LoginPage(self.driver)
        login_page.specify_email(email)
        login_page.specify_pass(password)
        login_page.press_login()

    def test_login(self):
        main_page = MainPage(self.driver)
        self.login()
        self.assertTrue(main_page.wait_for_grid_render())

    def test_add_new_worker(self):
        main_page = MainPage(self.driver)
        db_conn = DbConnect()
        fake_data = self.helpers.generate_fake_data()
        email = fake_data["email"]
        sql_query = """select "email" from "worker" where email='{}';""".format(
            email)
        self.login()
        main_page.press_add_new_worker()
        main_page.enter_email_address(email)
        main_page.press_search_emails()
        main_page.enter_first_name(fake_data["first_name"])
        main_page.enter_last_name(fake_data["last_name"])
        main_page.press_create_button()
        self.assertTrue(main_page.wait_for_confirm_message())
        query_response = db_conn.fetch_one(sql_query)
        self.assertIsNotNone(query_response)

    def test_edit_personal_data_via_profile(self):
        db_conn = DbConnect()
        api_helper = ApiHelper()
        main_page = MainPage(self.driver)
        fake_data = self.helpers.generate_fake_data()
        fake_data2 = self.helpers.generate_fake_data()
        fake_email = fake_data["email"]
        new_email = fake_data2["email"]
        sql_query = """select "email" from "worker" where email='{}';""".format(
            new_email)
        body = {
            'email': fake_email,
            'firstname': fake_data["first_name"],
            'lastname': fake_data["last_name"]
        }
        api_helper.make_http_request(method_type="POST",
                                     url_part="workers_creation",
                                     body=body)
        self.login()
        main_page.specify_search(fake_email)
        main_page.press_search_button()
        main_page.click_on_worker_name_in_grid()
        main_page.click_on_edit_profile()
        main_page.fill_fields_on_edit_pers_data(new_email,
                                                fake_data2["first_name"],
                                                fake_data2["last_name"])
        main_page.click_done_button()
        main_page.click_done_button()
        query_response = db_conn.fetch_one(sql_query)
        self.assertIsNotNone(query_response)

    def test_archived_worker(self):
        main_page = MainPage(self.driver)
        api_helper = ApiHelper()
        db_conn = DbConnect()
        fake_data = self.helpers.generate_fake_data()
        email = fake_data["email"]
        sql_query = """select "email" from worker where email='{}' and archived='true';""".format(
            email)
        body = {
            'email': email,
            'firstname': fake_data["first_name"],
            'lastname': fake_data["last_name"]
        }
        api_helper.make_http_request(method_type="POST",
                                     url_part="workers_creation",
                                     body=body)
        self.login()
        main_page.specify_search(email)
        main_page.press_search_button()
        main_page.click_on_checkbox_next_to_worker()
        main_page.click_on_archive_button()
        main_page.click_on_archive_button_in_dialog()
        query_response = db_conn.fetch_one(sql_query)
        self.assertIsNotNone(query_response)

    def test_upload_file_via_profile(self):
        main_page = MainPage(self.driver)
        api_helper = ApiHelper()
        db_conn = DbConnect()
        fake_data = self.helpers.generate_fake_data()
        fake_data2 = self.helpers.generate_fake_data()
        image_path = os.path.join(os.path.abspath('..'), 'tmp', 'test.png')
        email = fake_data["email"]
        cert_name = fake_data["cert_name"]
        body = {
            'email': email,
            'firstname': fake_data["first_name"],
            'lastname': fake_data["last_name"]
        }
        sql_query = '''select "courseName" from "certificate" 
                where "workerId"=(select "id" from worker where email='{}') 
                and "courseName"='{}';'''.format(email, cert_name)
        api_helper.make_http_request(method_type="POST",
                                     url_part="workers_creation",
                                     body=body)
        self.login()
        main_page.specify_search(email)
        main_page.press_search_button()
        main_page.click_on_worker_name_in_grid()
        main_page.click_add_new_record()
        main_page.send_file_to_upload_input(image_path)
        main_page.select_from_drop_down()
        main_page.type_certificate_name(cert_name)
        main_page.type_tr_provider_name(fake_data2["cert_name"])
        main_page.type_dates("2016-12-10", "2019-12-12")
        main_page.type_additional_info(fake_data2["cert_name"])
        main_page.press_submit_button()
        query_response = db_conn.fetch_one(sql_query)
        self.assertIsNotNone(query_response)

    def test_edit_certificates(self):
        main_page = MainPage(self.driver)
        api_helper = ApiHelper()
        db_conn = DbConnect()
        fake_data = self.helpers.generate_fake_data()
        fake_data2 = self.helpers.generate_fake_data()
        email = fake_data["email"]
        first_name = fake_data["first_name"]
        last_name = fake_data["last_name"]
        image_file = "efb9c5a7-862b-46ca-9ce3-7c8110d0cbff_share rules.png"
        query = """select "id" from worker where email='{}';""".format(email)
        worker_body = {
            'email': email,
            'firstname': first_name,
            'lastname': last_name
        }
        api_helper.make_http_request(method_type="POST",
                                     url_part="workers_creation",
                                     body=worker_body)
        worker_id = db_conn.fetch_one(query)[0]
        cert_body = {
            'courseName': fake_data["cert_name"],
            'description': fake_data["random_phrase"],
            'expiration': "2030-11-05T16:01:38.433Z",
            'file': image_file,
            'issued': "2016-11-05T16:01:38.433Z",
            'trainingProvider': fake_data2["cert_name"],
            'workerId': worker_id
        }
        certificate_query = """select "courseName" from "certificate" where "workerId"=(
        select "id" from worker where email='{}') 
        and "courseName"='{}' 
        and "description"='{}' 
        and "trainingProvider"='{}' 
        and "file"='{}';""".format(
            email, "Certificate name after EDITING",
            "Additional Certificate Details after EDITING",
            "Training Provider Name after EDITING", image_file)
        api_helper.make_http_request(method_type="POST",
                                     url_part="certificates_creation",
                                     body=cert_body)
        self.login()
        main_page.specify_search(email)
        main_page.press_search_button()
        main_page.click_on_worker_name_in_grid()
        main_page.click_edit_certificates_control()
        main_page.type_certificate_name("Certificate name after EDITING")
        main_page.type_tr_provider_name("Training Provider Name after EDITING")
        main_page.type_dates("2000-01-01", "2040-12-12")
        main_page.type_additional_info(
            "Additional Certificate Details after EDITING")
        main_page.press_submit_button()
        query_response = db_conn.fetch_one(certificate_query)
        self.assertIsNotNone(query_response)

    def test_save_teams(self):
        db_conn = DbConnect()
        main_page = MainPage(self.driver)
        fake_data = self.helpers.generate_fake_data()
        team_name = fake_data["cert_name"]
        sql_query = '''select "name" from "team" where name='{}';'''.format(
            team_name)
        self.login()
        main_page.click_on_checkbox_next_to_worker(1)
        main_page.click_on_checkbox_next_to_worker(2)
        main_page.click_on_checkbox_next_to_worker(3)
        main_page.click_on_checkbox_next_to_worker(4)
        main_page.click_on_checkbox_next_to_worker(5)
        main_page.click_save_team_button()
        main_page.type_team_name_while_saving(team_name)
        main_page.click_save_button_while_saving_team()
        main_page.click_done_button()
        query_response = db_conn.fetch_one(sql_query)
        self.assertIsNotNone(query_response)

    def test_verify_project_team_filter(self):
        main_page = MainPage(self.driver)
        api_helper = ApiHelper()
        fake_data = self.helpers.generate_fake_data()
        team_name = fake_data["cert_name"]
        worker_id = self.helpers.create_worker()
        body = {'name': team_name, 'workerIds': [worker_id]}
        api_helper.make_http_request(method_type="POST",
                                     url_part="teams_creation",
                                     body=body)
        self.login()
        main_page.open_project_teams_filter()
        main_page.mark_checkbox_in_modals()
        main_page.click_apply_button_in_modals()
        self.assertTrue(main_page.verify_chips_is_present())
        main_page.select_all_workers_in_the_grid()
        self.assertTrue(main_page.verify_text_of_counting_worker())

    def test_share_workers_to_another_employee(self):
        main_page = MainPage(self.driver)
        fake_data = self.helpers.generate_fake_data()
        recipient_name = fake_data["cert_name"]
        recipient_email = Config.api_second_login
        recipient_company_name = fake_data["random_phrase2"]
        project_name = fake_data["cert_name2"]
        comments = fake_data["random_phrase"]
        names_list = self.helpers.create_multiple_workers(5)
        self.login()
        main_page.click_on_checkbox_next_to_worker(1)
        main_page.click_on_checkbox_next_to_worker(2)
        main_page.click_on_checkbox_next_to_worker(3)
        main_page.click_on_checkbox_next_to_worker(4)
        main_page.click_on_checkbox_next_to_worker(5)
        main_page.click_share_team_button()
        main_page.fill_recipient_name_while_sharing(recipient_name)
        main_page.fill_recipient_email_while_sharing(recipient_email)
        main_page.fill_recipient_company_name_while_sharing(
            recipient_company_name)
        main_page.fill_project_name_while_sharing(project_name)
        main_page.fill_comments_for_recipient_while_sharing(comments)
        main_page.click_share_button()
        main_page.click_done_button()
        main_page.click_sign_out()
        self.login(Config.api_second_login)
        self.assertTrue(main_page.wait_for_grid_render())
        main_page.click_shared_button()
        main_page.mark_checkboxes_in_shared_modal()
        main_page.click_apply_button_in_modals()
        main_page.wait_for_grid_render()
        self.assertTrue(main_page.check_name_exist_in_grid(names_list[0]))
        self.assertTrue(main_page.check_name_exist_in_grid(names_list[1]))
        self.assertTrue(main_page.check_name_exist_in_grid(names_list[2]))
        self.assertTrue(main_page.check_name_exist_in_grid(names_list[3]))
        self.assertTrue(main_page.check_name_exist_in_grid(names_list[4]))

    def test_sync_button(self):
        main_page = MainPage(self.driver)
        self.login()
        main_page.click_sync_button()
        main_page.wait_for_sync()
        self.assertTrue(main_page.wait_for_grid_render())

    def test_download_csv(self):
        main_page = MainPage(self.driver)
        db_conn = DbConnect()
        self.login()
        main_page.click_download_csv_button()
        sql_query = '''select count(email) 
        from worker where "employerId"='{}' and archived='False';'''.format(
            Config.db_login)
        query_response = db_conn.fetch_one(sql_query)
        self.assertEqual(self.helpers.get_count_of_emails_in_csv(),
                         query_response[0])

    def test_validate_main_search(self):
        main_page = MainPage(self.driver)
        api_helper = ApiHelper()
        fake_data = self.helpers.generate_fake_data()
        email = fake_data["email"]
        f_name = "{} {}".format(fake_data["name_prefix"],
                                fake_data["first_name"])
        l_name = fake_data["last_name"]
        first_and_last_name = "{} {}".format(f_name, l_name)
        employee_id = fake_data["random_number"]
        body = {
            'email': email,
            'firstname': f_name,
            'lastname': l_name,
            'employeeId': employee_id
        }
        api_helper.make_http_request(method_type="POST",
                                     url_part="workers_creation",
                                     body=body)
        self.login()
        # search by first and last name
        main_page.specify_search(first_and_last_name)
        main_page.press_search_button()
        self.assertTrue(
            main_page.check_name_exist_in_grid(first_and_last_name))
        # search by email
        main_page.clear_search_filed()
        main_page.specify_search(email)
        main_page.press_search_button()
        self.assertTrue(
            main_page.check_name_exist_in_grid(first_and_last_name))
        # search by worker's employee id
        main_page.clear_search_filed()
        main_page.specify_search(employee_id)
        main_page.press_search_button()
        self.assertTrue(
            main_page.check_name_exist_in_grid(first_and_last_name))
Exemple #15
0
def search_box_is_displayed(demos_page):
    search_box = demos_page.sidebar.search_box
    assert Helpers.wait_for(lambda: search_box.is_displayed, 10, 2)
Exemple #16
0
def there_should_be_n_elements_in_results(demos_page, N):
    assert Helpers.wait_for(lambda: int(N) == len(demos_page.sidebar.items), 10, 2)
Exemple #17
0
def go_through_all_links(demos_page: DemosPage, control_name: str):
    Helpers.wait_for(lambda: demos_page.header.is_displayed, 10, 2)
    assert str.lower(demos_page.header.text) in str.lower(control_name)
 def get_page_dimensions(self, page):
     _, _, w, h = Helpers.vertices_to_boundingbox(
         page['page_info']['page_boundingBox']['vertices'])
     return w, h
def autocomplete_control_should_became_collapsed(autocomplete_control, driver):
    allure.attach(driver.get_screenshot_as_png(),
                  name='screenshot',
                  attachment_type=allure.attachment_type.PNG)
    assert Helpers.wait_for(lambda: not autocomplete_control.is_expanded, 10,
                            2)
Exemple #20
0
def sidebar_is_displayed(demos_page) -> SideMenu:
    sidebar = demos_page.sidebar
    assert Helpers.wait_for(lambda: sidebar.is_displayed, 10, 2)

    return sidebar