Skip to content

Pushing changes for Formplayer Automation until 03/03/25 #385

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Formplayer/testCases/test_01_login_as.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

28 changes: 28 additions & 0 deletions Formplayer/testCases/test_04_basic_test_forms_01.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
67 changes: 40 additions & 27 deletions Formplayer/testPages/basic_test_app/basic_test_app_preview.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)[{}]"
Expand Down Expand Up @@ -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))
Expand All @@ -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"

Expand All @@ -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)
Expand Down
75 changes: 69 additions & 6 deletions Formplayer/testPages/basic_test_app/basic_test_web_apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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')]")
Expand All @@ -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]"
Expand Down Expand Up @@ -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")
Expand All @@ -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):
Expand All @@ -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"
Expand All @@ -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"
Expand All @@ -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"

Expand All @@ -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")
Expand Down Expand Up @@ -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)

19 changes: 19 additions & 0 deletions Formplayer/testPages/webapps/login_as_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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)
1 change: 1 addition & 0 deletions Formplayer/userInputs/user_inputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Loading