Compare commits

...

7 Commits

Author SHA1 Message Date
naomi 265838b36b Fixed pdf labels test
Squashed commit of the following:

commit 5a5ce83065be076623259c21ad4b6a7902236809
Author: naomi <naomi@happycatsin.space>
Date:   Fri Feb 4 07:38:59 2022 +0200

    mob next [ci-skip] [ci skip] [skip ci]
2022-02-04 07:39:10 +02:00
Cassowary Rusnov 5f0c77c499 Fix export contacts test.
Squashed commit of the following:

commit 81d88bd69775edbbe7018038df60f266357171da
Author: Cassowary Rusnov <rusnovn@gmail.com>
Date:   Thu Feb 3 21:20:51 2022 -0800

    mob next [ci-skip] [ci skip] [skip ci]

commit f3639dbaccfd0f28d8ffb285993b688e94136fad
Author: naomi <naomi@happycatsin.space>
Date:   Fri Feb 4 07:04:16 2022 +0200

    mob next [ci-skip] [ci skip] [skip ci]

Co-authored-by: naomi <naomi@happycatsin.space>
2022-02-03 21:21:20 -08:00
Cassowary Rusnov 98ec8e0e3d Merge pull request 'Fix activities selector and minor QOL changes' (#12) from cas_activities_20211109 into main
Reviewed-on: #12
2021-11-10 19:24:24 +01:00
Cassowary Rusnov 104eab4e90 Fix activities selector and minor QOL changes
This changes the test_activities_tab test to select the Activities
tab by label instead of by a fixed id, in addition to providing
support for this sort of selection in the future.

Fixes: #11
2021-11-09 10:56:03 -08:00
naomi 3bd09a9ef4 Merge branch 'main' of ssh://git.autonomic.zone:2222/autonomic-cooperative/civicrm-update-tester 2021-11-03 16:41:59 +00:00
naomi f228527c65 --dev points to dev now 2021-11-03 16:40:35 +00:00
Cassowary Rusnov b91c04774d Merge pull request 'Fix some type hints in civicrm_tester/base.py' (#10) from cas_typehint_fix_2021-11-03 into main
Reviewed-on: #10
2021-11-03 17:33:48 +01:00
5 changed files with 28 additions and 21 deletions

View File

@ -10,6 +10,7 @@ from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from typing import Tuple, List
@ -36,7 +37,7 @@ class BaseTester:
self.user = user
self.passwd = passwd
if dev:
self.base_url = "https://crm.staging.caat.org.uk"
self.base_url = "https://crm.dev.caat.org.uk"
else:
self.base_url = "https://crm.staging.caat.org.uk"
@ -128,6 +129,10 @@ class BaseTester:
self.logout()
self.browser.close()
def find_element(self, *args, **kwargs):
"""Alias for browser.find_element"""
return self.browser.find_element(*args, **kwargs)
def find_element_by_id(self, *args, **kwargs):
"""Alias for browser.find_element_by_id"""
return self.browser.find_element_by_id(*args, **kwargs)
@ -144,6 +149,13 @@ class BaseTester:
"""Alias for using inbuilt wait object for wait.until(EC.element_to_be_clickable)"""
return self.wait.until(EC.element_to_be_clickable(locator))
def get_tab_selector(self, tabtitle):
"""Return an XPATH string to the tab labelled `tablabel`."""
return "//li/a[@title='{label}']/..".format(label=tabtitle)
def get_actions_dropdown_option_selector(self, optionlabel):
"""Return an XPATH string to the option labelled `optionlabel` (This is not a normal dropdown)."""
return "//div[text()='{label}']".format(label=optionlabel)
class SearchExportTester(BaseTester):
def __init__(self, *args, **kwargs):
@ -177,18 +189,13 @@ class SearchExportTester(BaseTester):
self.wait_until_visible((By.ID, "alpha-filter"))
self.debug("table of results has loaded")
def _select_option_from_magic_dropdown(self, option_id: str):
"""
Wrapper to click an option from the dropdown menu within the search on civicrm.
Magic dropdown because it literally is not how dropdowns should work at all
All options have an ID but this can change depending on the context of how you get to the search page
MUST BE CALLED WHEN ON THE SEARCH RESULTS PAGE
"""
self.debug("exporting results using the magic dropdown")
def _select_option_from_magic_dropdown_label(self, option_label: str):
self.find_element_by_id(self.contact_selectall_id).click()
self.find_element_by_id(self.contact_dropdown_id).click()
self.find_element_by_id(option_id).click()
self.wait_until_visible((By.CSS_SELECTOR, ".crm-block"))
self.wait_until_visible((By.XPATH, self.get_actions_dropdown_option_selector(option_label)))
option = self.find_element(By.XPATH, self.get_actions_dropdown_option_selector(option_label))
ActionChains(self.browser).move_to_element(option).perform()
option.click()
def download_export(self, data: dict) -> requests.Response:
"""

View File

@ -14,10 +14,10 @@ class TestActivitiesTab(BaseTester):
def _test(self, cid: str):
self.debug("loading contact page for CID %s" % cid)
self.browser.get(self.contact_page.format(cid))
self.wait_until_visible((By.ID, "ui-id-10"))
self.wait_until_visible((By.XPATH, self.get_tab_selector("Activities")))
# Contact page as loaded
activities_tab_button = self.find_element_by_id("ui-id-10")
num_element = activities_tab_button.find_element_by_tag_name("em")
activities_tab_button = self.find_element(By.XPATH, self.get_tab_selector("Activities"))
num_element = activities_tab_button.find_element(By.TAG_NAME, "em")
num_of_activ = int(num_element.text)
activities_tab_button.click()
table_row_selector = (
@ -65,4 +65,4 @@ class TestActivitiesTab(BaseTester):
cid_na = "42269" # Nigel Addams
#cid_db = "43193" Use to test 100 max limit
cid_tuple = (cid_da, cid_kh, cid_na)
self._test_all(cid_tuple)
self._test_all(cid_tuple)

View File

@ -2,6 +2,8 @@ import csv
import io
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from .base import SearchExportTester
@ -14,8 +16,6 @@ class TestContactExport(SearchExportTester):
self.desc(
"Testing if exporting contacts from a search returns a CSV file with all expected contacts."
)
# FIXME: THIS FUCKING CHANGES!!!!!!
# If you are having issues with the tests, go back and try and find the id for the item in the drop down. its all stupid js so we have to hack it like this and press it instead of post request
self.contact_exportoption_id = "select2-result-label-13"
def download_csv(self):
@ -64,7 +64,7 @@ class TestContactExport(SearchExportTester):
self.debug("searching for contacts with term '%s'" % search_term)
self._wait_for_search_to_load()
result_no = self._get_contact_search_number()
self._select_option_from_magic_dropdown(self.contact_exportoption_id)
self._select_option_from_magic_dropdown_label("Export contacts")
exported_number_exports = self.calculate_exported_contacts_number()
if exported_number_exports == (result_no):

View File

@ -33,7 +33,7 @@ class TestSteeringCommitteePrintLabels(SearchExportTester):
self._wait_for_search_to_load()
result_no = self._get_contact_search_number()
self.debug("exporting results using the magic dropdown")
self._select_option_from_magic_dropdown(self.mail_label_option)
self._select_option_from_magic_dropdown_label("Mailing labels - print")
# By omitting the field, we are effectively disabling the do not mail filter
data = {
"_qf_default": "Label:submit",

View File

@ -31,8 +31,8 @@ if __name__ == "__main__":
cl_arg = (
arguments.user, arguments.passwd, arguments.dev, arguments.show_browser
)
TestActivitiesTab(*cl_arg).test_all_hardcoded_contacts()
TestContactExport(*cl_arg).test_hardcoded_search_terms()
#TestActivitiesTab(*cl_arg).test_all_hardcoded_contacts()
#TestContactExport(*cl_arg).test_hardcoded_search_terms()
TestSteeringCommitteePrintLabels(*cl_arg).test()
# Mailing list