diff --git a/Formplayer/testCases/test_01_login_as.py b/Formplayer/testCases/test_01_login_as.py index 3d9a3abfb..a31837a75 100644 --- a/Formplayer/testCases/test_01_login_as.py +++ b/Formplayer/testCases/test_01_login_as.py @@ -26,3 +26,4 @@ def test_case_01_login_as_app_preview(driver, settings): app_preview.login_as_app_preview_content() app_preview.login_as_app_preview_form_submission(app_preview.form_input_login) app_preview.submit_history_verification("login", UserData.app_preview_mobile_worker) + diff --git a/Formplayer/testCases/test_04_basic_test_forms_01.py b/Formplayer/testCases/test_04_basic_test_forms_01.py index d9193f985..dec276926 100644 --- a/Formplayer/testCases/test_04_basic_test_forms_01.py +++ b/Formplayer/testCases/test_04_basic_test_forms_01.py @@ -324,3 +324,31 @@ def test_case_34_form_linking_app_preview(driver, settings): # app_preview.open_basic_tests_app(UserData.basic_tests_app['tests_app']) basic.open_form(UserData.basic_test_app_forms['form_linking'], UserData.basic_test_app_forms['form_linking_child']) basic.form_linking_child(case, child) +# +# def test_case_35_date_and_time_web_apps(driver, settings): +# login = LoginAsPage(driver, settings) +# login.open_webapps_menu() +# login.login_as_user(UserData.app_preview_mobile_worker) +# basic = BasicTestWebApps(driver) +# login.open_basic_tests_app(UserData.basic_tests_app['tests_app']) +# basic.open_form(UserData.basic_test_app_forms['logic_test1'], UserData.basic_test_app_forms['date_and_time']) +# basic.date_and_time_form_check() + + +def test_case_36_pagination_web_apps(driver,settings): + login = LoginAsPage(driver, settings) + login.open_webapps_menu() + basic = BasicTestWebApps(driver) + basic.verify_pagination_login_as() + +def test_case_36_pagination_app_preview(driver,settings): + app_preview = LoginAsAppPreviewPage(driver, settings) + basic = BasicTestAppPreview(driver) + app_preview.open_view_app_preview(UserData.basic_tests_app['tests_app']) + basic.verify_pagination_login_as() + +def test_case_37_file_upload(driver, settings): + login = LoginAsPage(driver, settings) + login.open_webapps_menu() + login.login_as_user(UserData.app_preview_mobile_worker) + basic = BasicTestWebApps(driver) diff --git a/Formplayer/testPages/app_preview/login_as_app_preview_page.py b/Formplayer/testPages/app_preview/login_as_app_preview_page.py index 8f5ac4775..bd05b89fd 100644 --- a/Formplayer/testPages/app_preview/login_as_app_preview_page.py +++ b/Formplayer/testPages/app_preview/login_as_app_preview_page.py @@ -16,7 +16,7 @@ class LoginAsAppPreviewPage(BasePage): def __init__(self, driver, settings): super().__init__(driver) self.webapp = WebAppsBasics(self.driver) - + self.dashboard_link = settings['url'] + "/dashboard/project/" self.form_input_no_login = "app preview test without login" + fetch_random_string() self.form_input_login = "app preview test" + fetch_random_string() diff --git a/Formplayer/testPages/basic_test_app/basic_test_app_preview.py b/Formplayer/testPages/basic_test_app/basic_test_app_preview.py index 520028cb0..ee7decf9c 100644 --- a/Formplayer/testPages/basic_test_app/basic_test_app_preview.py +++ b/Formplayer/testPages/basic_test_app/basic_test_app_preview.py @@ -73,6 +73,9 @@ def __init__(self, driver): self.custom_incomplete_form_list = "//tr[@class='formplayer-request']/td[2][contains(.,'{}')]" self.incomplete_form_title = (By.XPATH, "//li[contains(@class,'breadcrumb')][contains(.,'Incomplete Forms')]") self.incomplete_list_count = (By.XPATH, "//tbody/tr[@class='formplayer-request']") + self.search_user_input_area = (By.XPATH, "//div[@class='input-group input-group-lg']/input[@placeholder ='Filter workers']") + self.login_as = (By.XPATH,"//h3[text()='Log in as']") + self.user_list_count = (By.XPATH, "//tbody/tr[@class='formplayer-request js-user']") self.no_of_pages = (By.XPATH, "//li[contains(@class,'js-page')]") self.list_drop_down = (By.XPATH, "//select[contains(@class,'per-page-limit')]") self.page_number = "(//li[contains(@class,'js-page')]/a)[{}]" @@ -1696,33 +1699,46 @@ def verify_pagination(self): self.wait_for_element(self.incomplete_form_title) while self.is_present(self.page_navigation): if self.is_present(self.page_navigation): - self.switch_to_default_content() time.sleep(3) self.verify_page_navigation() time.sleep(3) self.verify_goto_page_button() time.sleep(3) self.verify_list_per_page() - self.switch_to_frame(self.iframe) - elif self.is_present(self.page_navigation) == False and len(self.find_elements(self.incomplete_list_count)) > 0: - self.switch_to_default_content() + elif self.is_present(self.page_navigation) == False and len( + self.find_elements(self.incomplete_list_count)) > 0: self.verify_list_per_page() - self.switch_to_frame(self.iframe) else: print("No incomplete form present") self.driver.back() self.webapp.wait_to_click(self.incomplete_form) self.wait_for_element(self.incomplete_form_title) if self.is_present(self.page_navigation) == False and len(self.find_elements(self.incomplete_list_count)) > 0: - self.switch_to_default_content() self.verify_list_per_page() else: print("No incomplete form present") self.driver.back() self.switch_to_default_content() - def verify_list_per_page(self): + def verify_pagination_login_as(self): self.switch_to_frame(self.iframe) + self.js_click(self.login_as) + time.sleep(3) + self.wait_for_element(self.search_user_input_area, 120) + if self.is_present(self.page_navigation): + time.sleep(3) + self.verify_page_navigation() + time.sleep(3) + self.verify_goto_page_button() + time.sleep(3) + self.verify_list_per_page() + elif self.is_present(self.page_navigation) == False and len(self.find_elements(self.i)) > 0: + self.verify_list_per_page() + else: + print("No users are present") + self.switch_to_default_content() + + def verify_list_per_page(self): if self.is_present(self.page_navigation): page_count = self.find_elements(self.no_of_pages) print(len(page_count)) @@ -1746,23 +1762,24 @@ def verify_list_per_page(self): latest_page_count = self.find_elements(self.no_of_pages) if self.is_present(self.page_navigation): if len(latest_page_count) > 1: - assert len(self.find_elements(self.incomplete_form_list)) <= int(i), "List count not equal to 10" + assert len(self.find_elements(self.incomplete_form_list)) == int(i), "List count not equal to 10" else: assert len(self.find_elements(self.incomplete_form_list)) in range(min_list_count, max_list_count), "List count is not valid" else: assert len(self.find_elements(self.incomplete_form_list)) in range(min_list_count, - max_list_count), "List count is not valid" - self.switch_to_default_content() + max_list_count), "List count is not valid" def verify_page_navigation(self): - self.switch_to_frame(self.iframe) page_count = self.find_elements(self.no_of_pages) n = len(page_count) print(n) self.webapp.wait_to_click(self.last_list_page) time.sleep(3) - classname = self.get_attribute((By.XPATH, self.page_number.format(n)),"aria-current") + # classname = self.get_attribute((By.XPATH, self.page_number.format(n)), "class") + # print(classname) + # assert "js-page active" in classname, "Click is not successful on last page" + classname = self.get_attribute((By.XPATH, self.page_number.format(n)), "aria-current") print(classname) assert classname == 'page', "Click is not successful on last page" @@ -1772,39 +1789,35 @@ def verify_page_navigation(self): print(classname) assert classname == 'page', "Click is not successful on first page" + # assert "js-page active" in classname, "Click is not successful on first page" + print("navigating forward") - for i in range(len(page_count)-1)[::]: + for i in range(len(page_count) - 1)[::]: self.webapp.wait_to_click(self.next_list_button) time.sleep(3) - classname = self.get_attribute((By.XPATH, self.page_number.format(i+2)), "aria-current") + classname = self.get_attribute((By.XPATH, self.page_number.format(i + 2)), "aria-current") print(classname) assert classname == 'page', "Click is not successful" print("navigating backward") - for i in range(len(page_count)-1)[::]: + for i in range(len(page_count) - 1)[::]: self.webapp.wait_to_click(self.prev_list_button) time.sleep(3) - classname = self.get_attribute((By.XPATH, self.page_number.format(len(page_count)-i-1)), "aria-current") + classname = self.get_attribute((By.XPATH, self.page_number.format(len(page_count) - i - 1)), "aria-current") print(classname) assert classname == 'page', "Click is not successful" - self.switch_to_default_content() def verify_goto_page_button(self): - self.switch_to_frame(self.iframe) page_count = self.find_elements(self.no_of_pages) n = len(page_count) print(n) - for i in range(len(page_count)): - self.wait_to_clear_and_send_keys(self.go_to_page_input, str(i+1)) - time.sleep(1) - self.js_click(self.go_button) + for i in range(len(page_count))[::-1]: + self.wait_to_clear_and_send_keys(self.go_to_page_input, str(i + 1)) + self.webapp.wait_to_click(self.go_button) time.sleep(4) - classname = self.get_attribute((By.XPATH, self.page_number.format(i+1)), "aria-current") - print(str(i+1), classname) + classname = self.get_attribute((By.XPATH, self.page_number.format(i + 1)), "aria-current") + print(classname) assert classname == 'page', "Click is not successful" - self.switch_to_default_content() - - def form_linking_parent_form(self): self.switch_to_frame(self.iframe) diff --git a/Formplayer/testPages/basic_test_app/basic_test_web_apps.py b/Formplayer/testPages/basic_test_app/basic_test_web_apps.py index d71f52abb..323d7f08b 100644 --- a/Formplayer/testPages/basic_test_app/basic_test_web_apps.py +++ b/Formplayer/testPages/basic_test_app/basic_test_web_apps.py @@ -2,7 +2,6 @@ import re import time from datetime import datetime, timedelta - from selenium.webdriver.common.keys import Keys from Formplayer.testPages.webapps.login_as_page import LoginAsPage @@ -71,6 +70,7 @@ def __init__(self, driver): self.login_as_option = (By.XPATH, "//div[@class='js-restore-as-item appicon appicon-restore-as']") self.incomplete_form = (By.XPATH, "//div[@class='js-incomplete-sessions-item appicon appicon-incomplete']") self.incomplete_form_title = (By.XPATH, "//h1[@class='page-title'][.='Incomplete Forms']") + self.search_user_input_area = (By.XPATH, "//input[@placeholder='Filter workers']") self.no_of_pages = (By.XPATH, "//li[contains(@class,'js-page')]") self.page_number = "(//li[contains(@class,'js-page')]/a)[{}]" self.page_navigation = (By.XPATH, "//div[contains(@class,'module-per-page-container')]") @@ -86,9 +86,10 @@ def __init__(self, driver): self.followup_form = (By.XPATH, "//h3[contains(text(), 'Followup Form')]") self.name_question = (By.XPATH, "//label[.//span[contains(.,'Enter a Name')]]/following-sibling::div//textarea[contains(@class,'textfield form-control')]") - self.incomplete_form_list = (By.XPATH, "//tr[@class='formplayer-request']") + self.incomplete_form_list = (By.XPATH, "//tr[contains(@class,'formplayer-request')]") self.custom_incomplete_form_list = "//tr[@class='formplayer-request']/td[2][contains(.,'{}')]" self.incomplete_list_count = (By.XPATH, "//tbody/tr[@class='formplayer-request']") + self.login_as = (By.XPATH,"//h3[text()='Log in as']") self.delete_incomplete_form = "(//tr[@class='formplayer-request']/descendant::div[@aria-label='Delete form'])[{}]" self.custom_delete_incomplete_form = "(//tr[@class='formplayer-request']/td[2][contains(.,'{}')]/following::div[@aria-label='Delete form'])[{}]" self.edit_incomplete_form = "(//tr[@class='formplayer-request'][./td[2][contains(.,'{}')]]/descendant::div//i[contains(@class,'fa fa-pencil')])[1]" @@ -1337,7 +1338,8 @@ def verify_pagination(self): self.verify_goto_page_button() time.sleep(3) self.verify_list_per_page() - elif self.is_present(self.page_navigation) == False and len(self.find_elements(self.incomplete_list_count)) > 0: + elif self.is_present(self.page_navigation) == False and len( + self.find_elements(self.incomplete_list_count)) > 0: self.verify_list_per_page() else: print("No incomplete form present") @@ -1350,6 +1352,23 @@ def verify_pagination(self): print("No incomplete form present") self.driver.back() + def verify_pagination_login_as(self): + self.webapp.wait_to_click(self.login_as) + time.sleep(3) + self.wait_for_element(self.search_user_input_area, 120) + if self.is_present(self.page_navigation): + time.sleep(3) + self.verify_page_navigation() + time.sleep(3) + self.verify_goto_page_button() + time.sleep(3) + self.verify_list_per_page() + elif self.is_present(self.page_navigation) == False and len(self.find_elements(self.i)) > 0: + self.verify_list_per_page() + else: + print("No users are present") + self.js_click(self.home_button) + time.sleep(3) def verify_list_per_page(self): if self.is_present(self.page_navigation): @@ -1375,7 +1394,7 @@ def verify_list_per_page(self): latest_page_count = self.find_elements(self.no_of_pages) if self.is_present(self.page_navigation): if len(latest_page_count) > 1: - assert len(self.find_elements(self.incomplete_form_list)) <= int(i), "List count not equal to 10" + assert len(self.find_elements(self.incomplete_form_list)) == int(i), "List count not equal to 10" else: assert len(self.find_elements(self.incomplete_form_list)) in range(min_list_count, max_list_count), "List count is not valid" @@ -1398,7 +1417,6 @@ def verify_page_navigation(self): self.webapp.wait_to_click(self.first_list_page) time.sleep(3) - # classname = self.get_attribute((By.XPATH, self.page_number.format(1)), "class") classname = self.get_attribute((By.XPATH, self.page_number.format(1)), "aria-current") print(classname) assert classname == 'page', "Click is not successful on first page" @@ -1414,10 +1432,12 @@ def verify_page_navigation(self): assert classname == 'page', "Click is not successful" print("navigating backward") + print(len(page_count)) for i in range(len(page_count)-1)[::]: self.webapp.wait_to_click(self.prev_list_button) time.sleep(3) classname = self.get_attribute((By.XPATH, self.page_number.format(len(page_count)-i-1)), "aria-current") + print(len(page_count)-i-1) print(classname) assert classname == 'page', "Click is not successful" @@ -1426,7 +1446,7 @@ def verify_goto_page_button(self): n = len(page_count) print(n) for i in range(len(page_count))[::-1]: - self.wait_to_clear_and_send_keys(self.go_to_page_input, i+1) + self.wait_to_clear_and_send_keys(self.go_to_page_input, str(i+1)) self.webapp.wait_to_click(self.go_button) time.sleep(4) classname = self.get_attribute((By.XPATH, self.page_number.format(i+1)), "aria-current") @@ -2115,5 +2135,48 @@ def custom_badge(self): self.is_present_and_displayed(self.formplayer_badge) self.is_present_and_displayed(self.case_tests_badge) + # date_and_time + + def check_date(self, date_check): + presentday = datetime.now() + # Get new date + new_date = presentday.strftime('%m/%d/%Y') #convert date to the format we want + given_date = datetime.strptime(date_check, "%m/%d/%Y") + print('New Date: ',new_date ) + if given_date == new_date: + return True + else: + return False + def check_time(self, time_check): + time_now = datetime.now().strftime("%H:%M:%S") + print('Time Now: ', time_now) + if time_check == time_now: + return True + else: + return False + # time_diff = abs((time_now.strftime('%H:%M:%S') - time_check).total_seconds() / 60) + # Check if the time difference is within ±2 minutes + # if time_diff <= 2: + # print("Time is within ±2 minutes") + # return True + # else: + # print("Time is not within ±2 minutes") + # return False + + # def date_and_time_form_check(self): + # self.wait_for_element((By.XPATH, self.input_field.format('This should display today'))) + # text = self.get_attribute((By.XPATH, self.input_field.format('This should display today')),"value") + # result = self.check_date(text) + # print (text) + # print(result) + # # assert result, "Today's Date is not displayed by default" + # time_text = self.get_attribute((By.XPATH, self.input_field.format('time by default')),"value") + # time_result = self.check_time(time_text) + # print(time_result) + # print(time_text) + # format_date = self.get_attribute((By.XPATH, self.input_field.format('with the format YYYY-MM-DD')), "value") + # format_date_check = self.check_date(format_date) + # print(format_date) + # print(format_date_check) diff --git a/Formplayer/testPages/webapps/login_as_page.py b/Formplayer/testPages/webapps/login_as_page.py index 95da68efe..146d110da 100644 --- a/Formplayer/testPages/webapps/login_as_page.py +++ b/Formplayer/testPages/webapps/login_as_page.py @@ -7,6 +7,7 @@ from common_utilities.selenium.base_page import BasePage from Formplayer.userInputs.user_inputs import UserData + """"Contains test page elements and functions related to the Homepage of Commcare""" class LoginAsPage(BasePage): @@ -107,3 +108,21 @@ def login_as_user(self, username): time.sleep(2) logged_in_username = self.get_text(self.webapp_working_as) assert logged_in_username == self.username, "Logged in" + + def verify_pagination_login_as(self): + self.webapp.wait_to_click(self.login_as) + time.sleep(3) + self.wait_for_element(self.search_user_input_area, 120) + if self.is_present(self.basic_webapps.page_navigation): + time.sleep(3) + self.basic_webapps.verify_page_navigation() + time.sleep(3) + self.basic_webapps.verify_goto_page_button() + time.sleep(3) + self.basic_webapps.verify_list_per_page() + elif self.is_present(self.basic_webapps.page_navigation) == False and len(self.find_elements(self.i)) > 0: + self.basic_webapps.verify_list_per_page() + else: + print("No users are present") + self.js_click(self.basic_webapps.home_button) + time.sleep(3) \ No newline at end of file diff --git a/Formplayer/userInputs/user_inputs.py b/Formplayer/userInputs/user_inputs.py index 15c885f62..38f877cd5 100644 --- a/Formplayer/userInputs/user_inputs.py +++ b/Formplayer/userInputs/user_inputs.py @@ -70,6 +70,7 @@ class UserData: "subcaseone": "Sub Case One", "close_subcase": "Close Case", "logic_test1": "Logic Tests 1", + "date_and_time": "Date & Time", "constraints": "Constraints", "fixtures": "Fixtures", "functions": "Functions",