mangroveorg/datawinners

View on GitHub
func_tests/pages/languagespage/account_wide_reply_sms_page.py

Summary

Maintainability
C
1 day
Test Coverage
from selenium.webdriver.support.wait import WebDriverWait

from framework.utils.common_utils import by_css, by_xpath, by_id
from framework.utils.drop_down_web_element import DropDown
from framework.utils.text_box_web_element import TextBox
from pages.languagespage.customized_language_locator import LANGUAGE_DROP_DOWN_LOCATOR, LANGUAGE_SAVE_BUTTON_LOCATOR, NEW_LANGUAGE_INPUT_BOX, ADD_NEW_LANG_CONFIRM_BUTTON, CUSTOMIZED_MESSAGE_TEXTBOXES_LOCATOR, ACCOUNT_WIDE_MESSAGE_TEXTBOXES_LOCATOR, \
    REVERT_TO_ORIGINAL_LINK, LAST_WARNING_MESSAGE_LOCATOR, CANCEL_CHANGES_LOCATOR
from pages.page import Page
from tests.testsettings import UI_TEST_TIMEOUT


class AccountWideSmsReplyPage(Page):
    def __init__(self, driver):
        Page.__init__(self, driver)

    def update_message_for_selector(self, msg_locator, message):
        custom_message_text_box = self.driver.find(msg_locator)
        self.update_custom_message(message, custom_message_text_box)

    def remove_appended_message_for_selector(self, locator, message):
        custom_message_text_box = self.driver.find(locator)
        self.driver.execute_script("$(arguments[0]).html(_.str.rtrim($(arguments[0]).html(), arguments[1])); $(arguments[0]).trigger( 'blur' );", custom_message_text_box, message)
        self.save_changes()

    def update_custom_message(self, message, message_box):
        self.driver.execute_script("$(arguments[0]).html($(arguments[0]).html() + arguments[1]);", message_box, message)
        # hack to update ko viewmodel
        self.driver.execute_script("$(arguments[0]).trigger( 'blur' );", message_box)

    def click_revert_changes_button(self):
        dont_save_button = self.driver.find_visible_element(by_css(".no_button"))
        dont_save_button.click()
        self.driver.wait_until_web_element_is_not_present(UI_TEST_TIMEOUT, dont_save_button)

    def click_save_changes_button(self):
        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"))

    def clear_custom_message(self, message_box_locator):
        message_box = self.driver.find(message_box_locator)
        message_box.clear()
        # hack to update ko viewmodel
        self.driver.execute_script("$(arguments[0]).trigger( 'blur' );", message_box)

    def append_custom_message_for(self, msg_locator, message):
        message_box = self.driver.wait_for_element(UI_TEST_TIMEOUT, msg_locator, want_visible=True)
        self.update_custom_message(message, message_box)

    def save_changes(self):
        self.driver.find(LANGUAGE_SAVE_BUTTON_LOCATOR).click()
        self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css(".success-message-box"))

    def get_success_message(self):
        success_message = self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css(".success-message-box"),want_visible=True)
        return self.driver.execute_script("return arguments[0].innerHTML", success_message)

    def wait_till_success_message_box_disappears(self):
        self.driver.wait_until_element_is_not_present(UI_TEST_TIMEOUT, by_css(".success-message-box"))

    def wait_for_reply_messages_to_load(self):
        #waiting for the last custom message to be populated
        WebDriverWait(self.driver, UI_TEST_TIMEOUT).until(lambda driver:  driver.execute_script("return $('#account_message5').text().length > 0"))

    def get_custom_message_for(self, msg_locator):
        msg_box = self.driver.find(msg_locator)
        return self.driver.execute_script("return $(arguments[0]).html()", msg_box)

    def get_all_account_wide_messages(self):
        return [self.driver.execute_script("return $(arguments[0]).TextNTags('getText')",r) for r in self.driver.find_elements_(ACCOUNT_WIDE_MESSAGE_TEXTBOXES_LOCATOR)]

    def set_message_boxes(self, default_en_messages,locator=CUSTOMIZED_MESSAGE_TEXTBOXES_LOCATOR):
        for (index, e) in enumerate(self.driver.find_elements_(locator)):
            e.clear()
            e.send_keys(default_en_messages[index])

    def revert_account_messages_to_default(self):
        [self.driver.execute_script("$(arguments[0]).html(_.str.rtrim($(arguments[0]).html(),'new message')); $(arguments[0]).trigger( 'blur' );", r) for r in self.driver.find_elements_(ACCOUNT_WIDE_MESSAGE_TEXTBOXES_LOCATOR)]
        self.save_changes()

    def revert_to_original(self):
        elements_ = self.driver.find_elements_(REVERT_TO_ORIGINAL_LINK)
        print(elements_.__len__())
        for i,r in enumerate(elements_):
            r.click()
            self.driver.wait_for_element(UI_TEST_TIMEOUT,by_xpath(LAST_WARNING_MESSAGE_LOCATOR % (i+1)),True)


    def cancel_changes(self):
        self.driver.find(CANCEL_CHANGES_LOCATOR).click()

    def keep_changes(self):
        self.driver.find_visible_element(by_id("keep_changes")).click()

    def revert_changes(self):
        self.driver.find_visible_element(by_id("revert_changes")).click()