Esempio n. 1
0
 def setUpClass(cls):
     HeadlessRunnerTest.setUpClass()
     login(cls.driver)
     cls.global_navigation = GlobalNavigationPage(cls.driver)
     cls.all_contacts_page = cls.global_navigation.navigate_to_all_data_sender_page(
     )
     cls.unique_id = "rep" + random_number(3)
Esempio n. 2
0
 def test_should_add_a_new_project_manager_as_ngo_admin(self):
     self.add_user_page.select_role_as_project_manager()
     questionnaires = self.add_user_page.select_questionnaires(2)
     user = generate_user()
     self.add_user_page.add_user_with(user)
     message = self.add_user_page.get_success_message()
     self.assertEqual(message, ADDED_USER_SUCCESS_MSG)
     self.username = fetch_(USERNAME, user)
     password = DEFAULT_PASSWORD
     self.new_user_credential = {USERNAME: self.username, PASSWORD: password}
     self.driver.go_to(ALL_USERS_URL)
     questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for(self.username)
     role_for_user = self.all_users_page.get_role_for(self.username)
     self.assertEqual('Project Manager', role_for_user,
                      'Expected role to be Project Manager but was %s' % role_for_user)
     self.assertTrue(questionnaires[0] in questionnaire_list_for_user)
     self.assertTrue(questionnaires[1] in questionnaire_list_for_user)
     self.assertEqual(2, len(questionnaire_list_for_user),
                      'Expected the questionnaires length to be 2 but was %s' %
                      len(questionnaire_list_for_user))
     self.global_navigation.sign_out()
     login(self.driver, self.new_user_credential)
     title = self.driver.get_title()
     self.assertEqual(title, DASHBOARD_PAGE_TITLE)
     self.global_navigation.sign_out()
Esempio n. 3
0
 def delete_user(self, username):
     self.global_navigation.sign_out()
     login(self.driver, VALID_CREDENTIALS)
     self.driver.go_to(ALL_USERS_URL)
     all_users_page = AllUsersPage(self.driver)
     self.driver.find(by_xpath("//td[contains(.,'%s')]/../td/input" % username)).click()
     all_users_page.select_delete_action(confirm=True)
     self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css("span.loading"), True)
     self.driver.wait_until_modal_dismissed()
     message = all_users_page.get_message()
     self.assertEqual(message, SUCCESSFULLY_DELETED_USER_MSG)
Esempio n. 4
0
 def test_should_check_if_org_settings_is_restricted_to_extended_user(self):
     add_user_page = self.all_users_page.navigate_to_add_user()
     add_user_page.select_role_as_administrator()
     user_data = generate_user()
     add_user_page.add_user_with(user_data)
     add_user_page.get_success_message()
     self.global_navigation.sign_out()
     new_user_credential = {USERNAME: user_data[USERNAME], PASSWORD: "******"}
     login(self.driver, new_user_credential)
     self.driver.go_to(ORG_SETTINGS_URL)
     title = self.driver.get_title()
     self.assertEqual(title, ACCESS_DENIED_TITLE)
Esempio n. 5
0
 def test_should_create_activity_log_and_submit_data(self):
     add_user_page = self.all_users_page.navigate_to_add_user()
     add_user_page.add_user_with(NEW_USER_DATA)
     self.driver.go_to(LOGOUT)
     new_user_credential = {USERNAME: NEW_USER_DATA[USERNAME], PASSWORD: "******"}
     login(self.driver, new_user_credential)
     self.driver.go_to(DATA_WINNER_ALL_PROJECTS_PAGE)
     project_name, questionnaire_code = self.create_project()
     self.send_submission(questionnaire_code)
     self.delete_user(NEW_USER_DATA[USERNAME])
     self.check_sent_submission(project_name)
     self.check_deleted_user_name_on_activity_log_page(project_name)
     self.driver.go_to(LOGOUT)
     login(self.driver, VALID_CREDENTIALS)
Esempio n. 6
0
 def test_should_create_project_and_its_accessible_by_the_creator(self):
     self.global_navigation_page.sign_out()
     login(self.driver, USER_RASITEFA_CREDENTIALS)
     self.project_name = random_string()
     self.client.logout()
     self.client.login(username="******",
                       password="******")
     file_name = 'ft_advanced_questionnaire.xls'
     form_code = self._verify_questionnaire_creation(
         self.project_name, file_name)
     self.assertEqual(len(form_code), 3)
     all_project_page = self.global_navigation_page.navigate_to_view_all_project_page(
     )
     all_project_page.navigate_to_project_overview_page(self.project_name)
     self.assertEqual(self.driver.get_title(), u'Questionnaires - Overview')
Esempio n. 7
0
 def test_should_add_a_new_user(self):
     self.global_navigation = login(self.driver, VALID_CREDENTIALS)
     self.driver.go_to(ALL_USERS_URL)
     all_users_page = AllUsersPage(self.driver)
     add_user_page = all_users_page.navigate_to_add_user()
     add_user_page.add_user_with(ADD_USER_DATA)
     message = add_user_page.get_success_message()
     self.assertEqual(message, ADDED_USER_SUCCESS_MSG)
     username = fetch_(USERNAME, ADD_USER_DATA)
     password = DEFAULT_PASSWORD
     new_user_credential = {USERNAME: username, PASSWORD: password}
     self.global_navigation.sign_out()
     login(self.driver, new_user_credential)
     title = self.driver.get_title()
     self.assertEqual(title, DASHBOARD_PAGE_TITLE)
Esempio n. 8
0
 def go_to_reminder_page(self, project, credentials):
     global_navigation = login(self.driver, credentials)
     all_project_page = global_navigation.navigate_to_view_all_project_page(
     )
     overview_page = all_project_page.navigate_to_project_overview_page(
         project)
     return overview_page.navigate_to_reminder_page()
Esempio n. 9
0
 def setUpClass(cls):
     HeadlessRunnerTest.setUpClass()
     login(cls.driver)
     cls.all_datasenders_page = AllDataSendersPage(
         TestAllDataSenders.driver)
     cls.datasender_id_with_web_access = cls.register_datasender(
         VALID_DATASENDER_WITH_WEB_ACCESS,
         id=TestAllDataSenders._create_id_for_data_sender())
     cls.datasender_id_without_web_access = cls.register_datasender(
         VALID_DATASENDER_WITHOUT_WEB_ACCESS,
         id=TestAllDataSenders._create_id_for_data_sender())
     cls.user_mobile_number = TestAllDataSenders.add_new_user(NEW_USER_DATA)
     cls.driver.go_to(DATA_WINNER_ALL_DATA_SENDERS_PAGE)
     cls.all_datasenders_page.wait_for_table_to_load()
     cls.all_datasenders_page.search_with(cls.user_mobile_number)
     cls.user_ID = cls.all_datasenders_page.get_cell_value(1, 7)
Esempio n. 10
0
    def test_should_change_a_project_manager_to_extended_user(self):
        self.global_navigation = login(self.driver, VALID_CREDENTIALS)
        self.driver.go_to(ALL_USERS_URL)
        all_users_page = AllUsersPage(self.driver)
        add_user_page = all_users_page.navigate_to_add_user()
        user = generate_user()
        add_user_page.select_role_as_project_manager()
        add_user_page.select_questionnaires(2, 4)
        add_user_page.add_user_with(user)
        message = add_user_page.get_success_message()
        self.assertEqual(message, ADDED_USER_SUCCESS_MSG)
        self.driver.go_to(ALL_USERS_URL)
        self.all_users_page = AllUsersPage(self.driver)
        username = fetch_(USERNAME, user)
        self.assertTrue(
            self.all_users_page.is_editable(username),
            '%s user was expected to be editable but was not editable')
        self.all_users_page.select_user_with_username(username)
        edit_user_page = self.all_users_page.select_edit_action()

        self.assertTrue(edit_user_page.is_user_name_is_prefetched(username))
        self.assertTrue(edit_user_page.is_role_project_manager())
        edit_user_page.select_role_as_administrator()
        edit_user_page.save_changes()
        edit_user_page.get_success_message()
        self.driver.go_to(ALL_USERS_URL)
        self.assertEqual('Administrator',
                         self.all_users_page.get_role_for(username))
        self.assertEqual(
            'All',
            self.all_users_page.get_questionnaire_list_for(username)[0])
        self.global_navigation.sign_out()
Esempio n. 11
0
    def test_export(self):
        self.client.login(username='******',
                          password='******')
        self.global_navigation_page = login(self.driver, VALID_CREDENTIALS)
        questionnaire_code = self._verify_questionnaire_creation(
            self.project_name)
        temporary_project_name = navigate_and_verify_web_submission_page_is_loaded(
            self.driver, self.global_navigation_page, self.project_name)
        # Make 2 submissions
        self._do_web_submission(temporary_project_name, questionnaire_code,
                                '*****@*****.**', 'tester150411')
        self._do_web_submission(temporary_project_name, questionnaire_code,
                                '*****@*****.**', 'tester150411')

        resp = self.client.post(
            '/project/export/log?type=all', {
                'project_name': self.project_name,
                'search_filters':
                "{\"search_text\":\"\",\"dateQuestionFilters\":{}}",
                'questionnaire_code': questionnaire_code
            })

        xlfile_fd, xlfile_name = tempfile.mkstemp(".xlsx")
        os.write(xlfile_fd, resp.content)
        os.close(xlfile_fd)
        workbook = xlrd.open_workbook(xlfile_name)
        self.assertEquals(workbook.sheet_names(), [
            u'main', u'rep_group1', u'my_repeat1_group1', u'my_outer_repeat1'
        ])

        self._verify_main_sheet(workbook)
        self._verify_second_sheet(workbook)
        self._verify_third_sheet(workbook)
        self._verify_fourth_sheet(workbook)
Esempio n. 12
0
 def setUpClass(cls):
     cls.organization = DatabaseManager().get_organization_by_email(fetch_(from_(USERNAME), VALID_CREDENTIALS))
     cls.organization.account_type = "Pro"
     cls.organization.save()
     HeadlessRunnerTest.setUpClass()
     cls.global_navigation = login(cls.driver)
     cls.dbm = get_db_manager('hni_testorg_slx364903')
Esempio n. 13
0
 def setUpClass(cls):
     cls.driver = setup_driver("phantom")
     cls.test_data = os.path.join(DIR, 'testdata')
     cls.admin_email_id = '*****@*****.**'
     cls.global_navigation_page = login(cls.driver, VALID_CREDENTIALS)
     cls.client = Client()
     cls.client.login(username=cls.admin_email_id, password='******')
 def go_to_analysis_page(self, credentials, project_name):
     global_navigation = login(self.driver, credentials)
     all_data_page = global_navigation.navigate_to_all_data_page()
     analysis_page = all_data_page.navigate_to_data_analysis_page(
         project_name)
     analysis_page.wait_for_table_data_to_load()
     return analysis_page
 def _setUp(self):
     self.test_data = os.path.join(DIR, 'testdata')
     self.admin_email_id = '*****@*****.**'
     self.global_navigation_page = login(self.driver, VALID_CREDENTIALS)
     self.client = Client()
     self.client.login(username=self.admin_email_id,
                       password='******')
Esempio n. 16
0
 def test_should_add_a_new_extended_user_as_ngo_admin(self):
     self.add_user_page.select_role_as_administrator()
     user = generate_user()
     self.add_user_page.add_user_with(user)
     message = self.add_user_page.get_success_message()
     self.assertEqual(message, ADDED_USER_SUCCESS_MSG)
     self.username = fetch_(USERNAME, user)
     password = DEFAULT_PASSWORD
     self.new_user_credential = {USERNAME: self.username, PASSWORD: password}
     self.driver.go_to(ALL_USERS_URL)
     role_for_user = self.all_users_page.get_role_for(self.username)
     self.assertEqual('Administrator', role_for_user, 'Expected role to be Administrator but was %s' % role_for_user)
     self.global_navigation.sign_out()
     login(self.driver, self.new_user_credential)
     title = self.driver.get_title()
     self.assertEqual(title, DASHBOARD_PAGE_TITLE)
Esempio n. 17
0
 def test_should_check_if_account_settings_is_restricted_to_project_manager(self):
     add_user_page = self.all_users_page.navigate_to_add_user()
     add_user_page.select_role_as_project_manager()
     add_user_page.select_questionnaires(2)
     new_user_data = generate_user()
     add_user_page.add_user_with(new_user_data)
     add_user_page.get_success_message()
     self.global_navigation.sign_out()
     new_user_credential = {USERNAME: new_user_data[USERNAME], PASSWORD: "******"}
     login(self.driver, new_user_credential)
     self.driver.go_to(ORG_SETTINGS_URL)
     title = self.driver.get_title()
     self.assertEqual(title, ACCESS_DENIED_TITLE)
     self.driver.go_to(ALL_USERS_URL)
     title = self.driver.get_title()
     self.assertEqual(title, ACCESS_DENIED_TITLE)
Esempio n. 18
0
 def _create_extended_user(self, user):
     self.global_navigation = login(self.driver, VALID_CREDENTIALS)
     self.driver.go_to(ALL_USERS_URL)
     self.all_users_page = AllUsersPage(self.driver)
     self.add_user_page = self.all_users_page.navigate_to_add_user()
     self.add_user_page.select_role_as_administrator()
     self.add_user_page.add_user_with(user)
     self.add_user_page.get_success_message()
Esempio n. 19
0
 def test_should_create_activity_log_and_submit_data(self):
     add_user_page = self.all_users_page.navigate_to_add_user()
     user_data = generate_user()
     add_user_page.select_role_as_administrator()
     add_user_page.add_user_with(user_data)
     add_user_page.get_success_message()
     self.global_navigation.sign_out()
     new_user_credential = {USERNAME: user_data[USERNAME], PASSWORD: "******"}
     self.global_navigation = login(self.driver, new_user_credential)
     self.driver.go_to(DATA_WINNER_ALL_PROJECTS_PAGE)
     project_name, questionnaire_code = self.create_project()
     self.send_submission(user_data[MOBILE_PHONE], questionnaire_code)
     self.delete_user(user_data[USERNAME])
     self.check_sent_submission(project_name)
     self.check_deleted_user_name_on_activity_log_page(project_name)
     self.global_navigation.sign_out()
     self.global_navigation = login(self.driver, VALID_CREDENTIALS)
Esempio n. 20
0
    def setUpClass(cls):
        HeadlessRunnerTest.setUpClass()
        cls.message_tracker = MessageTracker()
        cls.message_tracker.organization_id = 'YDC120930'
        cls.message_tracker.sms_api_usage_count = 20
        cls.message_tracker.sms_registration_count = 10
        cls.message_tracker.outgoing_sms_count = 50
        cls.message_tracker.incoming_sms_count = 50
        cls.message_tracker.sent_reminders_count = 0
        cls.message_tracker.send_message_count = 0
        cls.message_tracker.incoming_sp_count = 160
        cls.message_tracker.incoming_web_count = 800
        cls.message_tracker.month = datetime.strftime(datetime.today(), "%Y-%m-01")
        cls.message_tracker.save()
        # doing successful login with valid credentials

        login(cls.driver, VALID_CREDENTIALS)
Esempio n. 21
0
 def setUpClass(cls):
     HeadlessRunnerTest.setUpClass()
     cls.global_navigation = login(cls.driver)
     dashboard_page = cls.global_navigation.navigate_to_dashboard_page()
     create_questionnaire_options_page = dashboard_page.navigate_to_create_project_page(
     )
     cls.create_questionnaire_page = create_questionnaire_options_page.select_blank_questionnaire_creation_option(
     )
    def test_should_create_project_when_xlsform_is_uploaded(self):
        self.setUpFirefox()
        self.project_name = random_string()

        file_name = 'ft_advanced_questionnaire.xls'
        form_code = self._verify_questionnaire_creation(
            self.project_name, file_name)
        project_temp_name, web_submission_page = navigate_and_verify_web_submission_page_is_loaded(
            self.driver, self.global_navigation_page, self.project_name)
        self._verify_datawinners_university()

        web_submission_page.navigate_to_datasenders_page()
        self._verify_datawinners_university()
        datasender_page = ProjectDataSendersPage(self.driver)
        datasender_page.search_with("1234123413").\
        select_a_data_sender_by_mobile_number("1234123413").perform_datasender_action(by_css(".remove"))
        datasender_page.refresh()
        datasender_page.navigate_to_analysis_page()
        self._verify_datawinners_university()
        DataAnalysisPage(self.driver).navigate_to_web_submission_tab()

        web_submission_page = AdvancedWebSubmissionPage(self.driver)
        self._do_web_submission('submission_data.xml', project_temp_name,
                                form_code, self.admin_email_id, 'tester150411')
        self._verify_submission_log_page(web_submission_page)
        datasender_rep_id, ds_email = self._register_datasender()
        self._verify_datawinners_university()

        self.driver.wait_for_page_with_title(UI_TEST_TIMEOUT,
                                             "Data Submission")

        datasender_page = DataSenderPage(self.driver)
        datasender_page.send_in_data()
        verify_advanced_web_submission_page_is_loaded(self.driver)
        self._verify_datawinners_university()
        self._do_web_submission('submission_data.xml', project_temp_name,
                                form_code, ds_email, NEW_PASSWORD)
        self.global_navigation_page.sign_out()

        self.global_navigation_page = login(self.driver, VALID_CREDENTIALS)
        submission_log_page = self.global_navigation_page.navigate_to_all_data_page(
        ).navigate_to_submission_log_page(
            self.project_name).wait_for_table_data_to_load()
        self._verify_datawinners_university()

        self.assertEqual(submission_log_page.get_total_number_of_records(), 2)

        self._verify_date_filters(submission_log_page)

        submission_log_page.search(datasender_rep_id)
        submission_log_page.check_submission_by_row_number(
            1).click_action_button().choose_on_dropdown_action(EDIT_BUTTON)
        verify_advanced_web_submission_page_is_loaded(self.driver)
        self._edit_and_verify_submission(datasender_rep_id, project_temp_name,
                                         True)

        self._verify_edit_of_questionnaire(file_name)
        self._verify_datawinners_university()
Esempio n. 23
0
 def setUpClass(cls):
     cls.test_passed = True
     cls.driver = setup_driver("firefox")
     cls.admin_email_id = '*****@*****.**'
     cls.global_navigation_page = login(cls.driver, VALID_CREDENTIALS)
     cls.client = Client()
     cls.client.login(username=cls.admin_email_id, password='******')
     cls.testdata = os.path.join(DIR, 'testdata')
     cls.user = User.objects.get(username=VALID_CREDENTIALS.get('username'))
Esempio n. 24
0
 def setUpClass(cls):
     HeadlessRunnerTest.setUpClass()
     languages_page = login(cls.driver).navigate_to_languages_page()
     languages_page.select_language('English')
     languages_page.update_message_for_selector(
         SUBMISSION_WITH_INCORRECT_NUMBER_OF_RESPONSES_LOCATOR, 'Updated')
     languages_page.save_changes()
     assert languages_page.get_success_message(
     ) == 'Changes saved successfully.'
Esempio n. 25
0
 def _create_project_manager(self, user):
     self.global_navigation = login(self.driver, VALID_CREDENTIALS)
     self.driver.go_to(ALL_USERS_URL)
     self.all_users_page = AllUsersPage(self.driver)
     self.add_user_page = self.all_users_page.navigate_to_add_user()
     self.add_user_page.select_role_as_project_manager()
     self.add_user_page.select_questionnaires(1, 0)
     self.add_user_page.add_user_with(user)
     self.add_user_page.get_success_message()
Esempio n. 26
0
 def test_should_add_a_new_project_manager_as_extended_user(self):
     self.add_user_page.select_role_as_administrator()
     user = generate_user()
     self.add_user_page.add_user_with(user)
     message = self.add_user_page.get_success_message()
     self.assertEqual(message, ADDED_USER_SUCCESS_MSG)
     self.username = fetch_(USERNAME, user)
     password = DEFAULT_PASSWORD
     self.new_user_credential = {USERNAME: self.username, PASSWORD: password}
     self.global_navigation.sign_out()
     login(self.driver, self.new_user_credential)
     title = self.driver.get_title()
     self.assertEqual(title, DASHBOARD_PAGE_TITLE)
     self.driver.go_to(ALL_USERS_URL)
     self.all_users_page = AllUsersPage(self.driver)
     self.add_user_page = self.all_users_page.navigate_to_add_user()
     self.assertFalse(self.add_user_page.is_administrator_role_visible(),
                      'Expected Administrator Role not to be present but it was present')
     questionnaires = self.add_user_page.select_questionnaires(2)
     user = generate_user()
     self.add_user_page.add_user_with(user)
     message = self.add_user_page.get_success_message()
     self.assertEqual(message, ADDED_USER_SUCCESS_MSG)
     self.username = fetch_(USERNAME, user)
     password = DEFAULT_PASSWORD
     self.new_user_credential = {USERNAME: self.username, PASSWORD: password}
     self.driver.go_to(ALL_USERS_URL)
     questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for(self.username)
     role_for_user = self.all_users_page.get_role_for(self.username)
     self.assertEqual('Project Manager', role_for_user,
                      'Expected role to be Project Manager but was %s' % role_for_user)
     if not questionnaires[0] in questionnaire_list_for_user:
         self.driver.create_screenshot("debug-ft-qre-not-in-list")
         raise Exception("%s not in [%s] for user %s" % (questionnaires[0], ", ".join(questionnaire_list_for_user), self.username))
     self.assertTrue(questionnaires[0] in questionnaire_list_for_user)
     self.assertTrue(questionnaires[1] in questionnaire_list_for_user)
     self.assertEqual(2, len(questionnaire_list_for_user),
                      'Expected the questionnaires length to be 2 but was %s' %
                      len(questionnaire_list_for_user))
     self.global_navigation.sign_out()
     login(self.driver, self.new_user_credential)
     title = self.driver.get_title()
     self.assertEqual(title, DASHBOARD_PAGE_TITLE)
Esempio n. 27
0
 def dissociate_all_datasenders_from_clinic3_project(self):
     global_navigation = login(self.driver, VALID_CREDENTIALS)
     all_project_page = global_navigation.navigate_to_view_all_project_page()
     overview_page = all_project_page.navigate_to_project_overview_page("clinic3 test project")
     ds_page = overview_page.navigate_to_datasenders_page()
     ds_page.click_checkall_checkbox()
     number = ds_page.get_number_of_selected_datasenders()
     if number != 0 :
         ds_page.perform_datasender_action(by_css(".remove"))
         self.driver.wait_for_page_load()
     self.driver.go_to(LOGOUT)
 def setUpClass(cls):
     HeadlessRunnerTest.setUpClass()
     cls.message_tracker = MessageTracker()
     cls.message_tracker.organization_id = 'YDC120930'
     cls.message_tracker.sms_api_usage_count = 20
     cls.message_tracker.sms_registration_count = 10
     cls.message_tracker.outgoing_sms_count = 50
     cls.message_tracker.incoming_sms_count = 50
     cls.message_tracker.sent_reminders_count = 0
     cls.message_tracker.send_message_count = 0
     cls.message_tracker.incoming_sp_count = 160
     cls.message_tracker.incoming_web_count = 800
     cls.message_tracker.month = datetime.strftime(datetime.today(),
                                                   "%Y-%m-01")
     cls.message_tracker.save()
     # doing successful login with valid credentials
     from datawinners.accountmanagement.models import Organization
     org = Organization.objects.get(org_id="YDC120930")
     org.active_date = datetime.now()
     org.status_changed_datetime = datetime.now()
     org.save()
     login(cls.driver, VALID_CREDENTIALS)
Esempio n. 29
0
    def test_should_show_warning_when_trying_to_leave_page_without_saving(
            self):
        self.global_navigation = login(self.driver, VALID_CREDENTIALS)
        self.driver.go_to(ALL_USERS_URL)
        all_users_page = AllUsersPage(self.driver)
        all_users_page.select_user_with_username("*****@*****.**")
        edit_user_page = all_users_page.select_edit_action()
        edit_user_page.select_role_as_administrator()
        self.driver.refresh()
        expected_msg = u'This page is asking you to confirm that you want to leave - data you have entered may not be saved.'

        alert = self.driver.switch_to_alert()
        self.assertEqual(alert.text, expected_msg)
Esempio n. 30
0
    def test_should_add_question_successfully(self):
        login(self.driver, VALID_CREDENTIALS)
        self.driver.go_to(url("/entity/subjects/"))
        add_subject_type_page = AddSubjectTypePage(self.driver)
        add_subject_type_page.click_on_accordian_link()
        entity_type = VALID_ENTITY[ENTITY_TYPE] + generateId()
        add_subject_type_page.successfully_add_entity_type_with(entity_type)
        self.driver.go_to(url("/entity/subject/create/" + entity_type))
        subjects_page = ProjectSubjectsPage(self.driver)
        subjects_page.click_edit_form_link_and_continue()
        subjects_page.click_add_question_link()
        subjects_page.type_question_name('New Question')
        subjects_page.choose_question_type('text')
        self.assertEqual("New Question",
                         subjects_page.get_selected_question_label())

        existing_question_count = subjects_page.get_existing_questions_count()

        subjects_page.click_submit_button()
        self.assertTrue(subjects_page.is_success_message_tip_show())
        subjects_page.refresh()
        self.assertEqual(subjects_page.get_existing_questions_count(),
                         existing_question_count,
                         "Newly added question should be persisted")