Skip to content
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

Formplayer Appearance attributes & formatting tab automation #217

Open
wants to merge 1 commit into
base: QA-2857-automation-formplayer-tests-automation
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
17 changes: 17 additions & 0 deletions Formplayer/settings-sample.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[default]
# This is the environment url of commcare
url = https://www.commcarehq.org/
# Login username of the webuser
login_username =
# Login password of the webuser
login_password =
# This is a preconfigured browsertack username for mobile tests
bs_user =
# This is a preconfigured browsertack key used for mobile tests
bs_key =
# This is a preconfigured authentication key used for 2FA tests on staging
staging_auth_key =
# This is a preconfigured authentication key used for 2FA tests on prod
prod_auth_key =
# This is a preconfigured password for the user used to test web user invitation tests
invited_webuser_password =
162 changes: 162 additions & 0 deletions Formplayer/testCases/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
import os
import pytest

from configparser import ConfigParser
from pathlib import Path
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager

from Formplayer.userInputs.user_inputs import UserData
from common_utilities.hq_login.login_page import LoginPage

""""This file provides fixture functions for driver initialization"""


global driver


@pytest.fixture(scope="session")
def environment_settings():
"""Load settings from os.environ

Names of environment variables:
DIMAGIQA_URL
DIMAGIQA_LOGIN_USERNAME
DIMAGIQA_LOGIN_PASSWORD
DIMAGIQA_STAGING_AUTH_KEY
DIMAGIQA_PROD_AUTH_KEY

See https://docs.github.com/en/actions/reference/encrypted-secrets
for instructions on how to set them.
"""
settings = {}
for name in ["url", "login_username", "login_password",
"staging_auth_key",
"prod_auth_key"]:

var = f"DIMAGIQA_{name.upper()}"
if var in os.environ:
settings[name] = os.environ[var]
if "url" not in settings:
env = os.environ.get("DIMAGIQA_ENV") or "staging"
subdomain = "www" if env == "production" else env
## updates the url with the project domain while testing in CI
project = "a/qa-automation-prod" if env == "production" else "a/qa-automation"
settings["url"] = f"https://{subdomain}.commcarehq.org/{project}"
return settings

@pytest.fixture(scope="session", autouse=True)
def settings(environment_settings):
if os.environ.get("CI") == "true":
settings = environment_settings
settings["CI"] = "true"
if any(x not in settings for x in ["url", "login_username", "login_password",
"staging_auth_key",
"prod_auth_key"]):
lines = environment_settings.__doc__.splitlines()
vars_ = "\n ".join(line.strip() for line in lines if "DIMAGIQA_" in line)
raise RuntimeError(
f"Environment variables not set:\n {vars_}\n\n"
"See https://docs.github.com/en/actions/reference/encrypted-secrets "
"for instructions on how to set them."
)
return settings
path = Path(__file__).parent.parent / "settings.cfg"
if not path.exists():
raise RuntimeError(
f"Not found: {path}\n\n"
"Copy settings-sample.cfg to settings.cfg and populate "
"it with values for the environment you want to test."
)
settings = ConfigParser()
settings.read(path)
## updates the url with the project domain while testing in local
if settings["default"]["url"] == "https://www.commcarehq.org/":
settings["default"]["url"] = f"{settings['default']['url']}a/qa-automation-prod"
else:
settings["default"]["url"] = f"{settings['default']['url']}a/qa-automation"
return settings["default"]


@pytest.fixture(scope="module", autouse=True)
def driver(settings, browser):
web_driver = None
chrome_options = webdriver.ChromeOptions()
firefox_options = webdriver.FirefoxOptions()
if settings.get("CI") == "true":
if browser == "chrome":
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('disable-extensions')
chrome_options.add_argument('--safebrowsing-disable-download-protection')
chrome_options.add_argument('--safebrowsing-disable-extension-blacklist')
chrome_options.add_argument('window-size=1920,1080')
chrome_options.add_argument("--disable-setuid-sandbox")
chrome_options.add_argument('--start-maximized')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
chrome_options.add_argument("--disable-notifications")
chrome_options.add_experimental_option("prefs", {
"download.default_directory": str(UserData.DOWNLOAD_PATH),
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": True})
elif browser == "firefox":
firefox_options.set_headless()
firefox_options.add_argument('--no-sandbox')
firefox_options.add_argument('disable-extensions')
firefox_options.add_argument('--safebrowsing-disable-download-protection')
firefox_options.add_argument('--safebrowsing-disable-extension-blacklist')
firefox_options.add_argument('window-size=1920,1080')
firefox_options.add_argument("--disable-setuid-sandbox")
firefox_options.add_argument('--start-maximized')
firefox_options.add_argument('--disable-dev-shm-usage')
firefox_options.add_argument('--headless')
firefox_options.add_argument("--disable-notifications")
firefox_options.set_preference("browser.download.dir", str(UserData.DOWNLOAD_PATH))
if browser == "chrome":
web_driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=chrome_options)
print("Chrome version:", web_driver.capabilities['browserVersion'])
elif browser == "firefox":
web_driver = webdriver.Firefox(executable_path=GeckoDriverManager().install(), options=firefox_options)
else:
print("Provide valid browser")
login = LoginPage(web_driver, settings["url"])
login.login(settings["login_username"], settings["login_password"])
yield web_driver
web_driver.quit()


def pytest_addoption(parser):
"""CLI args which can be used to run the tests with specified values."""
parser.addoption("--browser", action="store", default='chrome', choices=['chrome', 'firefox'],
help='Your choice of browser to run tests.')


@pytest.fixture(scope="module")
def browser(request):
"""Pytest fixture for browser"""
return request.config.getoption("--browser")


@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item):
pytest_html = item.config.pluginmanager.getplugin("html")
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', [])
if report.when == "call" or report.when == "teardown":
xfail = hasattr(report, 'wasxfail')
if (report.skipped and xfail) or (report.failed and not xfail):
print("reports skipped or failed")
file_name = report.nodeid.replace("::", "_") + ".png"
screen_img = _capture_screenshot(item.funcargs["driver"])
if file_name:
html = '<div><img src="data:image/png;base64,%s" alt="screenshot" style="width:600px;height:300px;" ' \
'onclick="window.open(this.src)" align="right"/></div>' % screen_img
extra.append(pytest_html.extras.html(html))
report.extra = extra


def _capture_screenshot(web_driver):
return web_driver.get_screenshot_as_base64()
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
from Formplayer.testPages.app_preview.login_as_app_preview_page import LoginAsAppPreviewPage
from Formplayer.testPages.basic_test_app.basic_test_app_preview import BasicTestAppPreview
from Formplayer.testPages.basic_test_app.basic_test_web_apps import BasicTestWebApps
from Formplayer.testPages.webapps.login_as_page import LoginAsPage
from Formplayer.userInputs.user_inputs import UserData


def test_case_20_maps_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.form_specific_tests_app['case_list'], UserData.form_specific_tests_app['form_name'])
basic.maps_record_location()


def test_case_21_maps_app_preview(driver, settings):
app_preview = LoginAsAppPreviewPage(driver, settings)
basic = BasicTestAppPreview(driver)
login = LoginAsAppPreviewPage(driver, settings)
app_preview.open_view_app_preview(UserData.basic_tests_app['tests_app'])
login.login_as_user(UserData.app_preview_mobile_worker)
basic.turn_off_one_question_per_screen()
basic.open_form(UserData.form_specific_tests_app['case_list'], UserData.form_specific_tests_app['form_name'])
basic.maps_record_location()


def test_case_26_sub_menu_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.sub_menus()


def test_case_27_sub_menu_app_preview(driver, settings):
app_preview = LoginAsAppPreviewPage(driver, settings)
basic = BasicTestAppPreview(driver)
login = LoginAsAppPreviewPage(driver, settings)
app_preview.open_view_app_preview(UserData.basic_tests_app['tests_app'])
login.login_as_user(UserData.app_preview_mobile_worker)
basic.turn_off_one_question_per_screen()
basic.sub_menus()


def test_case_28_multimedia_app_logo_and_menu_and_form_multimedia_web_apps(driver, settings):
login = LoginAsPage(driver,settings)
login.open_webapps_menu()
basic = BasicTestWebApps(driver)
basic.multimedia_logo()
basic.multimedia_forms_menus()


def test_case_29_menu_and_form_multimedia_app_preview(driver, settings):
app_preview = LoginAsAppPreviewPage(driver, settings)
basic = BasicTestAppPreview(driver)
app_preview.open_view_app_preview(UserData.multimedia_app['tests_app'])
basic.multimedia_forms_menus()


def test_case_30_multimedia_form_nav_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.multimedia_app['tests_app'])
basic.multimedia_form_navigation()


def test_case_31_multimedia_form_nav_app_preview(driver, settings):
app_preview = LoginAsAppPreviewPage(driver, settings)
basic = BasicTestAppPreview(driver)
login = LoginAsAppPreviewPage(driver, settings)
app_preview.open_view_app_preview(UserData.multimedia_app['tests_app'])
login.login_as_user(UserData.app_preview_mobile_worker)
basic.turn_off_one_question_per_screen()
basic.multimedia_form_navigation()


def test_case_32_custom_badge_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.custom_badge()


def test_case_33_custom_badge_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.custom_badge()
Loading