def test_export(self): self.setUpFirefox() self.project_name = random_string() client = Client() client.login(username=self.admin_email_id, password='******') form_code = self._verify_questionnaire_creation( self.project_name, 'image.xlsx') project_temp_name, web_submission_page = navigate_and_verify_web_submission_page_is_loaded( self.driver, self.global_navigation_page, self.project_name) self._do_web_submission('submission_data_image.xml', project_temp_name, form_code, self.admin_email_id, 'tester150411', image_upload=True) self.driver.find(by_id('submission_log_link')).click() self.driver.find_visible_element(by_id('ignore_changes')).click() self._verify_submission_log_page_images(web_submission_page) self._do_web_submission('submission_data_image.xml', project_temp_name, form_code, self.admin_email_id, 'tester150411', image_upload=True) self._verify_submission_log_page_image_2(web_submission_page) self._verify_without_media(form_code) self._verify_with_media(form_code)
def test_dirty_dialog_behavior_for_add_new_language(self): self.change_reply_messages() self.language_page.select_add_new_language_option() self.assertTrue(self.is_warning_dialog_present()) self.language_page.click_revert_changes_button() self.driver.wait_for_element(UI_TEST_TIMEOUT, by_id("add_new_language_pop")) self.language_page.save_new_language("new_lang"+random_string(4)) self.assertEquals("Your language has been added successfully. Please translate the suggested automatic reply SMS text.", self.language_page.get_success_message()) self.driver.wait_until_element_is_not_present(UI_TEST_TIMEOUT, by_css(".success-message-box")) self.assertFalse(self.is_warning_dialog_present()) self.language_page.select_language("English", True) self.assertFalse(self.is_warning_dialog_present()) self.check_for_default_en_messages() self.language_page = CustomizedLanguagePage(self.driver) self.change_reply_messages() self.language_page.select_add_new_language_option() self.assertTrue(self.is_warning_dialog_present()) self.language_page.click_save_changes_button() self.driver.wait_until_element_is_not_present(UI_TEST_TIMEOUT, by_css(".success-message-box")) self.driver.wait_for_element(UI_TEST_TIMEOUT, by_id("add_new_language_pop")) self.language_page.save_new_language("new_lang"+random_string(4)) self.assertEquals("Your language has been added successfully. Please translate the suggested automatic reply SMS text.", self.language_page.get_success_message()) self.language_page.select_language("English", True) self.assertListEqual([msg + "new message" for msg in default_en_messages], self.language_page.get_all_customized_reply_messages())
def test_successful_association_and_dissociation_of_data_sender(self): self.all_datasenders_page.search_with( self.datasender_id_without_web_access) self.assertEqual( "", self.all_datasenders_page.get_project_names( self.datasender_id_without_web_access)) self.all_datasenders_page.associate_datasender_to_projects( self.datasender_id_without_web_access, ["clinic test project1", "clinic2 test project"]) self.driver.wait_until_element_is_not_present( UI_TEST_TIMEOUT, by_id("datasender_table_processing")) self.assertEqual( "clinic test project1, clinic2 test project", self.all_datasenders_page.get_project_names( self.datasender_id_without_web_access)) self.all_datasenders_page.dissociate_datasender_from_project( self.datasender_id_without_web_access, "clinic test project1") self.driver.wait_until_element_is_not_present( UI_TEST_TIMEOUT, by_id("datasender_table_processing")) self.assertEqual( "clinic2 test project", self.all_datasenders_page.get_project_names( self.datasender_id_without_web_access)) self.all_datasenders_page.dissociate_datasender_from_project( self.datasender_id_without_web_access, "clinic2 test project") self.driver.wait_until_element_is_not_present( UI_TEST_TIMEOUT, by_id("datasender_table_processing")) self.assertEqual( "", self.all_datasenders_page.get_project_names( self.datasender_id_without_web_access))
def get_project_list(self): create_by_template_option = self.driver.find( by_id("copy_existing_questionnaire")) create_by_template_option.click() self.driver.wait_for_element(UI_TEST_TIMEOUT, by_id("existing_questionnaires"), True) projects = self.driver.find_elements_( by_css(".questionnaire_data div.highlight_on_hover")) return [project.text for project in projects]
def _verify_date_filters(self, submission_log_page): self.assertEqual(submission_log_page.get_date_filter_count(), 5) # 4 date filters + 1 submission date filter submission_log_page.show_all_filters() submission_log_page.filter_by_date_question(LAST_MONTH, by_id('date-question-filter-date_time_widgets----my_date_year')) \ .wait_for_table_data_to_load() self.assertEqual(submission_log_page.get_total_number_of_records(), 0) submission_log_page.filter_by_date_question(ALL_PERIODS, by_id('date-question-filter-date_time_widgets----my_date_year')) \ .wait_for_table_data_to_load() self.assertEqual(submission_log_page.get_total_number_of_records(), 2)
def test_add_invalid_subjectType(self): self.driver.go_to(url("/entity/subjects/")) self.add_subject_type(SUBJECT_TYPE_WHITE_SPACES) self.validate_error_messages(ERROR_MSG_INVALID_ENTRY) self.driver.find(by_id("cancel_add_type")).click() self.add_subject_type(SUBJECT_TYPE_SPL_CHARS) self.validate_error_messages(ERROR_MSG_INVALID_ENTRY) self.driver.find(by_id("cancel_add_type")).click() self.add_subject_type(SUBJECT_TYPE_BLANK) self.validate_error_messages(ERROR_MSG_EMPTY_ENTRY)
def get_questions_list_for_selected_project(self, project_name): create_by_template_option = self.driver.find( by_id("copy_existing_questionnaire")) create_by_template_option.click() self.driver.wait_for_element(UI_TEST_TIMEOUT, by_id("existing_questionnaires"), True) self.driver.find( by_xpath( ".//*[@id='existing_questionnaires']/div/div[text()='%s']" % project_name)).click() self.driver.wait_for_element(UI_TEST_TIMEOUT, by_id("existing_questions"), True) questions_list = self.driver.find_elements_( by_css('#existing_questions li')) return [question.text for question in questions_list]
def configure_list_of_choices_type_question(self, question_data): """ Function to select list of choices option and add the choices on the questionnaire page Args: question_data is to add the choices on the page return self """ self.driver.find_drop_down(ANSWER_TYPE_DROPDOWN).set_selected( LIST_OF_CHOICES_OPTION) self.driver.find_element_by_id("choice_text0").clear() index = 1 choices = fetch_(CHOICE, from_(question_data)) for choice in choices: if index > 1: self.driver.find(ADD_CHOICE_LINK).click() box = self.driver.find_text_box( by_id("choice_text%d" % (index - 1))) box.send_keys(choice) index += 1 box = self.driver.find_text_box( by_xpath(CHOICE_XPATH_LOCATOR + "[1]" + CHOICE_TB_XPATH_LOCATOR)) box.send_keys(choices[0]) choice_type = fetch_(ALLOWED_CHOICE, from_(question_data)) if ONLY_ONE_ANSWER == choice_type: self.driver.find_radio_button(ONLY_ONE_ANSWER_RB).click() elif MULTIPLE_ANSWERS == choice_type: self.driver.find_radio_button(MULTIPLE_ANSWER_RB).click() return self
def is_visible(self): try: id = by_id("cancel_questionnaire_warning_message_dialog_section") self.driver.wait_for_element(UI_TEST_TIMEOUT, id, True) return self.driver.find(id).is_displayed() except CouldNotLocateElementException: return False
def is_hidden(self): try: id = by_id("cancel_questionnaire_warning_message_dialog_section") self.driver.wait_until_element_is_not_present(UI_TEST_TIMEOUT, id) return self.driver.find(id).is_displayed() == False except CouldNotLocateElementException: return True
def has_DS_received_sms(self, recipent, row, column, debug=False): try: sms_table_element = self.driver.find(by_id("poll_sms_table")) except Exception as e: sms_table_element = None if not sms_table_element or not sms_table_element.is_displayed(): self.select_element(POLL_TAB) time.sleep(3) self.select_element(POLL_SMS_ACCORDIAN) self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css("#poll_sms_table"), True) self.driver.wait_until_modal_dismissed() try: elements = self.driver.find_elements_by_css_selector( '#poll_sms_table>tbody>tr:nth-of-type(%s)>td:nth-of-type(%s)>span.small_grey' % (row, column)) recipient_name = [element.text for element in elements] for rep_id in recipent: if rep_id not in recipient_name: if debug: self.driver.create_screenshot( "debug-ft-ds-didn-receive-poll-sms") raise Exception("%s not in [%s]" % (rep_id, ", ".join(recipient_name))) return False return True except Exception as e: self.driver.create_screenshot( "debug-ft-has-ds-received-sms-element-not-found") raise e
def add_option_to_a_multiple_choice_question(self, new_choice_text): self.driver.find(by_id("add_choice")).click() question = self.get_list_of_choices_type_question() index = len(question[CHOICE]) self.driver.find_text_box( by_xpath(CHOICE_XPATH_LOCATOR + "[" + str(index) + "]" + CHOICE_TB_XPATH_LOCATOR)).enter_text(new_choice_text)
def verify_questions(self, create_questionnaire_page): questions = fetch_(QUESTIONS, from_(QUESTIONNAIRE_DATA_CLINIC_PROJECT)) create_questionnaire_page.select_question_link(2) self.driver.find(by_css("#question_title")).click() assert self.driver.find_visible_element(by_id("periode_green_message")) create_questionnaire_page.select_question_link(3) tip_message_element = self.driver.find(by_id('periode_green_message')) self.assertFalse(tip_message_element.is_displayed()) self.assertEqual(questions[0], create_questionnaire_page.get_word_type_question()) create_questionnaire_page.select_question_link(4) self.assertEqual(questions[1], create_questionnaire_page.get_number_type_question()) create_questionnaire_page.select_question_link(5) self.assertEqual(questions[2], create_questionnaire_page.get_date_type_question()) create_questionnaire_page.select_question_link(6) self.assertEqual(questions[3], create_questionnaire_page.get_list_of_choices_type_question()) create_questionnaire_page.select_question_link(7) self.assertEqual(questions[4], create_questionnaire_page.get_list_of_choices_type_question())
def has_DS_received_sms(self, recipent, row, column): self.select_element(POLL_TAB) self.select_element(POLL_SMS_ACCORDIAN) self.driver.wait_for_element(UI_TEST_TIMEOUT, by_id("poll_sms_table"), True) recipient_name = self.driver.find( by_xpath(".//*[@id='poll_sms_table']/tbody/tr[%s]/td[%s]" % (row, column))).text return recipent in recipient_name
def test_should_show_warning_message_when_account_message_edited(self): changed_messages = [ message + "new message" for message in default_messages ] self.change_account_messages() time.sleep(4) self.driver.find(by_css("#global_subjects_link")).click() self.verify_warning_dialog_present() self.driver.find_visible_element(by_id("cancel_dialog")).click() self.assertListEqual( changed_messages, self.account_sms_page.get_all_account_wide_messages()) self.driver.find(by_css("#global_subjects_link")).click() self.verify_warning_dialog_present() self.driver.find_visible_element(by_css(".no_button")).click() self.driver.find(by_css("#global_languages_link")).click() self.driver.find(by_id("account_wide_sms_link")).click() self.driver.wait_for_element(UI_TEST_TIMEOUT, by_id("account_wide_sms")) self.account_sms_page = AccountWideSmsReplyPage(self.driver) self.check_default_account_messages() self.change_account_messages() self.driver.find(by_css("#global_subjects_link")).click() self.verify_warning_dialog_present() self.driver.find_visible_element(by_css(".yes_button")).click() self.driver.wait_until_element_is_not_present( UI_TEST_TIMEOUT, by_css(".ui-dialog-titlebar")) self.driver.wait_until_element_is_not_present(UI_TEST_TIMEOUT, by_css(".blockPage")) self.driver.find(by_css("#global_languages_link")).click() self.driver.find(by_id("account_wide_sms_link")).click() self.account_sms_page = AccountWideSmsReplyPage(self.driver) self.account_sms_page.wait_for_reply_messages_to_load() self.assertListEqual( changed_messages, self.account_sms_page.get_all_account_wide_messages()) self.reset_account_messages()
def submit(self, debug=False): self.driver.find_visible_element(by_id('validate-form')).click() try: self.driver.wait_for_element(UI_TEST_TIMEOUT * 2, by_css('.success-message-box'), True) except Exception as e: self.driver.create_screenshot( "debug-ft-no-success-msg-after-submit") raise e self.driver.wait_for_page_load() return self
def get_total_number_of_entries(self): self.driver.wait_until_element_is_not_present( UI_TEST_TIMEOUT, by_id("failedsubmissions_table_processing")) #return int(self.driver.execute_script("return $('table tbody tr').length - 1")) try: return int( self.driver.execute_script( "return $('.dataTables_info').html().split(' ')[5]")) except Exception: return int( self.driver.execute_script( "return $('.dataTables_info').html().split(' ')[4]"))
def is_help_content_available(self): if not self.is_help_button_present(): return False import datetime from framework.utils.common_utils import by_id start_time = datetime.datetime.now() locator = by_id("need_help_button") self.driver.find(locator).click() iframe = self.driver.find(by_id('div_iframe')) end_time = start_time + datetime.timedelta(0, 120) while True: try: current_time = datetime.datetime.now() style = iframe.get_attribute('style') if style != '': return True if current_time >= end_time: return False except Exception as e: return False
def test_unsaved_warning_on_language_change(self): def change_language(): self.language_page.select_language("French") self.change_reply_messages() change_language() self.verify_warning_dialog_present() self.driver.find_visible_element(by_id("cancel_dialog")).click() self.assertListEqual( [msg + "new message" for msg in default_en_messages], self.language_page.get_all_customized_reply_messages()) change_language() self.verify_warning_dialog_present() self.language_page.click_revert_changes_button() self.assertFalse(self.is_warning_dialog_present()) self.language_page.refresh() self.language_page = CustomizedLanguagePage(self.driver) self.assertFalse(self.is_warning_dialog_present()) self.language_page.wait_for_reply_messages_to_load() self.check_for_default_en_messages() self.change_reply_messages() change_language() self.verify_warning_dialog_present() self.language_page.click_save_changes_button() self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css(".success-message-box"), True) self.language_page.refresh() self.driver.wait_for_page_load() self.language_page = CustomizedLanguagePage(self.driver) self.language_page.wait_for_reply_messages_to_load() self.assertListEqual( [msg + "new message" for msg in default_en_messages], self.language_page.get_all_customized_reply_messages()) self.reset_messages()
def test_unsaved_warning_dialog(self): def click_identification_number_page(): self.driver.find(by_css("#global_subjects_link")).click() self.change_reply_messages() click_identification_number_page() self.verify_warning_dialog_present() self.driver.find_visible_element(by_id("cancel_dialog")).click() self.assertListEqual( [msg + "new message" for msg in default_en_messages], self.language_page.get_all_customized_reply_messages()) click_identification_number_page() self.verify_warning_dialog_present() self.language_page.click_revert_changes_button() self.assertFalse(self.is_warning_dialog_present()) self.driver.find(by_css("#global_languages_link")).click() self.language_page = CustomizedLanguagePage(self.driver) self.assertFalse(self.is_warning_dialog_present()) self.language_page.wait_for_reply_messages_to_load() self.check_for_default_en_messages() self.change_reply_messages() click_identification_number_page() self.verify_warning_dialog_present() self.language_page.click_save_changes_button() self.driver.find(by_css("#global_languages_link")).click() self.driver.wait_for_page_load() self.language_page = CustomizedLanguagePage(self.driver) self.language_page.wait_for_reply_messages_to_load() self.assertListEqual( [msg + "new message" for msg in default_en_messages], self.language_page.get_all_customized_reply_messages()) self.reset_messages()
def get_questionnaire_title(self): return self.driver.find_text_box(by_id("questionnaire_title")).text
def add_choice_option_to_selected_question(self, choice_text=None): self.driver.find(by_id("add_choice")).click() if choice_text: self.driver.find_text_box( by_css("#options_list input:last")).enter_text(choice_text)
def set_question_title(self, title): self.driver.find_text_box(by_id("question_title")).enter_text(title)
def set_poll_questionnaire_title(self, title, generate_random=False): poll_title = title + generateId() if generate_random else title self.driver.wait_for_element(UI_TEST_TIMEOUT, by_id("poll_title"), True) self.driver.find_text_box(by_id("poll_title")).enter_text(poll_title) return poll_title
def change_nth_option_of_choice(self, index, new_text): self.driver.find_text_box(by_id("choice_text%d" % (index - 1))).enter_text(new_text)
def delete_the_poll(self): self.select_element(by_css('.delete_project')) self.select_element(by_id('confirm_delete_poll'))
def get_poll_status(self): return self.driver.find(by_id("poll_status")).text
def get_nth_option_of_choice(self, index): return self.driver.find(by_id("choice_text%d" % (index - 1)))
def test_should_show_upgrade_instruction_on_register_subjects_page(self): project_overview_page = self.navigate_to_clinic3_overview_page() my_subjects = project_overview_page.navigate_to_subjects_page() my_subjects.navigate_to_subject_registration_form_tab() self.driver.wait_for_element(20, by_id("sms_form_heading")) self.check_upgrade_instruction(project_overview_page)
def get_nth_option_choice_text(self, index): try: return self.driver.find(by_id("choice_text%d" % (index - 1))).get_attribute('value') except NoSuchElementException: return ""