예제 #1
0
파일: pages.py 프로젝트: allouchmed/osis
class LearningUnitPage(CommonPageMixin, pypom.Page):
    actions = ButtonField(By.ID, "dLabel")
    edit_button = Link('LearningUnitEditPage', By.CSS_SELECTOR,
                       "#link_edit_lu > a")
    proposal_edit = Link(EditLearningUnitProposalPage, By.CSS_SELECTOR,
                         "#link_proposal_modification > a")
    edit_proposal_button = Link(EditLearningUnitProposalPage, By.CSS_SELECTOR,
                                "#link_proposal_edit > a")
    proposal_suppression = Link(LearningUnitProposalEndYearPage,
                                By.CSS_SELECTOR,
                                "#link_proposal_suppression > a")
    new_partim = Link(NewPartimPage, By.ID, "new_partim")
    go_to_full = ButtonField(By.ID, "full_acronym")

    credits = Field(By.ID, "id_credits")
    annee_academique = Field(By.ID, "id_end_year")
    tab_training = Link(LearningUnitTrainingPage, By.ID, "training_link")
    tab_attribution = Link(LearningUnitAttributionPage, By.ID,
                           "attributions_link")
    tab_description = Link(DescriptionPage, By.ID, "description_link")
    tab_specification = Link(SpecificationPage, By.ID, "specification_link")

    def is_li_edit_link_disabled(self):
        return "disabled" in self.find_element(
            By.ID, "link_edit_lu").get_attribute("class")

    @property
    def loaded(self) -> bool:
        return "Identification" in self.find_element(
            By.CSS_SELECTOR, 'li.active[role=presentation]').text
예제 #2
0
class SearchEducationGroupPage(CommonPageMixin, pypom.Page):
    URL_TEMPLATE = '/educationgroups/'

    sigleintitule_abrege = InputField(By.ID, 'id_acronym')
    code = InputField(By.ID, 'id_partial_acronym')
    anac = SelectField(By.ID, 'id_academic_year')

    actions = ButtonField(By.ID, 'btn-action')
    new_training = ButtonField(By.CSS_SELECTOR, '#link_create_training > a', 1)
    new_mini_training = ButtonField(By.CSS_SELECTOR, '#link_create_mini_training > a', 1)

    first_row = Link('EducationGroupPage', By.CSS_SELECTOR,
                     '#table_education_groups > tbody > tr:nth-child(1) > td:nth-child(2) > a')

    type_de_formation = SelectField(By.ID, "id_name")
    confirm_modal = Link(NewTrainingPage, By.CSS_SELECTOR, '.modal-footer>input.btn-primary')
    clear_button = ButtonField(By.ID, 'btn_clear_filter')
    search = Link('SearchEducationGroupPage', By.CSS_SELECTOR, 'button.btn-primary', 1)

    quick_search = Link(QuickSearchPage, By.ID, 'quick-search', 1)

    def count_result(self):
        text = self.find_element(
            By.CSS_SELECTOR,
            '#main > div.panel.panel-default > div > div > div.row > div:nth-child(1)').text
        return text.split()[0]
예제 #3
0
class QuickSearchPage(AjaxModal):
    code = InputField(By.ID, 'id_search_text')
    search = ButtonField(By.CSS_SELECTOR, '#form-modal > div > div.col-md-1.col-md-offset-2 > button', 1)
    select_first = ButtonField(
        By.CSS_SELECTOR,
        '#form-modal-ajax-content > div.modal-body > div.row > div > table > tbody > tr > td:nth-child(1) > button'
    )

    lu_tab = ButtonField(By.CSS_SELECTOR, '#form-modal-ajax-content > div.modal-body > ul > li:nth-child(1) > a', 1)

    eg_tab = ButtonField(By.CSS_SELECTOR, '#form-modal-ajax-content > div.modal-body > ul > li:nth-child(2) > a')

    close = Link('EducationGroupPage', By.CSS_SELECTOR, '#form-modal-ajax-content > div.modal-header > button')
예제 #4
0
class SpecificationPage(pypom.Page):
    themes_abordes = CkeditorField(By.CLASS_NAME, 'cke_wysiwyg_frame')
    save_button = Link('SpecificationPage', By.CSS_SELECTOR, 'div.modal-footer > .btn-primary', 1)
    add_button = ButtonField(By.CSS_SELECTOR, '.btn.btn-info.btn-sm.trigger_modal')

    code = InputField(By.ID, 'id_code_name')
    texte = CkeditorField(By.CLASS_NAME, 'cke_wysiwyg_frame')

    up = ButtonField(By.XPATH, '//*[@id="form_achievements"]/div[3]/div[1]/div/button[1]')

    def find_edit_button(self, _):
        # TODO hardcoded value for "Thèmes abordés"
        return self.find_element(By.XPATH, '//*[@id="cms_text_fr_0"]/a')
예제 #5
0
class SearchStudentPage(CommonPageMixin, pypom.Page):

    URL_TEMPLATE = '/students/'

    registration_id = InputField(By.ID, 'id_registration_id')
    name = InputField(By.ID, 'id_name')

    search = ButtonField(By.ID, "bt_submit_student_search")

    def find_registration_id_in_table(self, row: int=1):
        return self.find_element(By.ID, 'td_student_%d' % row).text

    def find_name_in_table(self):
        names = []
        row = 1
        last = False
        while not last:
            try:
                elt = self.find_element(By.ID, 'spn_student_name_%d' % row)
                names.append(elt.text)

                row += 1
            except NoSuchElementException as e:
                return names

        return names
예제 #6
0
class NewTrainingPage(pypom.Page):
    sigleintitule_abrege = InputField(By.ID, 'id_acronym')
    code = InputField(By.ID, 'id_partial_acronym')
    intitule_en_francais = InputField(By.ID, 'id_title')
    entite_de_gestion = SelectEntityVersionField(By.ID, 'id_management_entity')
    entite_dadministration = SelectEntityVersionField(By.ID, 'id_administration_entity')
    intitule_du_diplome = InputField(By.ID, 'id_diploma_printing_title')

    tab_diploma = ButtonField(By.ID, 'lnk_diplomas_certificats')
    save_button = Link(EducationGroupPage, By.ID, 'btn-confirm', waiting_time=3)
예제 #7
0
class SearchEntityPage(CommonPageMixin, pypom.Page):
    URL_TEMPLATE = '/entities/'

    acronym = InputField(By.ID, 'id_acronym')
    title = InputField(By.ID, 'id_title')
    entity_type = SelectField(By.ID, "id_entity_type")

    search = ButtonField(By.ID, "bt_submit_entity_search")

    def find_acronym_in_table(self, row: int=1):
        return self.find_element(By.ID, 'td_entity_%d' % row).text
예제 #8
0
class DescriptionPage(pypom.Page):
    methode_denseignement = CkeditorField(By.CLASS_NAME, 'cke_wysiwyg_frame')

    add_button = ButtonField(By.XPATH, '//*[@id="pedagogy"]/div[2]/div[2]/div/a')
    save_button = Link('DescriptionPage', By.XPATH, '//*[@id="form-modal-ajax-content"]/form/div[3]/button[1]', 2)

    intitule = InputField(By.ID, 'id_title')
    support_obligatoire = RadioField(By.ID, 'id_mandatory')

    def find_edit_button(self, _):
        return self.find_element(By.XPATH, '//*[@id="pedagogy"]/table[1]/tbody/tr[2]/td[2]/a')
예제 #9
0
class SearchOrganizationPage(CommonPageMixin, pypom.Page):

    URL_TEMPLATE = '/organizations/'

    acronym = InputField(By.ID, 'id_acronym')
    name = InputField(By.ID, 'id_name')
    type = SelectField(By.ID, "id_type")

    search = ButtonField(By.ID, "bt_submit_organization_search")

    def find_acronym_in_table(self, row: int=1):
        return self.find_element(By.ID, 'td_organization_%d' % row).text
예제 #10
0
파일: pages.py 프로젝트: allouchmed/osis
class SearchLearningUnitPage(CommonPageMixin, pypom.Page):
    URL_TEMPLATE = '/learning_units/by_activity/'

    proposal_search = Link('SearchLearningUnitPage', By.ID,
                           'lnk_proposal_search', 1)

    anac = SelectField(By.ID, 'id_academic_year_id')
    acronym = InputField(By.ID, 'id_acronym')
    code = InputField(By.ID, 'id_acronym')
    tutor = InputField(By.ID, 'id_tutor')
    sigle_dossier = SelectField(By.ID, "id_entity_folder_id")

    requirement_entity = InputField(By.ID, 'id_requirement_entity_acronym')
    ent_charge = InputField(By.ID, 'id_requirement_entity_acronym')
    container_type = SelectField(By.ID, 'id_container_type')
    clear_button = ButtonField(By.ID, 'btn_clear_filter')

    search = Link('SearchLearningUnitPage', By.CSS_SELECTOR,
                  'button.btn-primary', 2)
    export = ButtonField(By.ID, "dLabel")
    list_learning_units = ButtonField(By.ID, "btn_produce_xls_with_parameters")
    with_program = ButtonField(By.ID, "chb_with_grp")
    with_tutor = ButtonField(By.ID, "chb_with_attributions")
    generate_xls = ButtonField(By.ID, "btn_xls_with_parameters")

    actions = ButtonField(By.ID, 'btn-action')
    new_luy = Link(NewLearningUnitPage, By.ID, 'lnk_learning_unit_create')
    create_proposal_url = Link(NewLearningUnitProposalPage, By.ID,
                               'lnk_create_proposal_url')

    # TODO this action is really slow.
    back_to_initial_yes = Link(
        'SearchLearningUnitPage', By.CSS_SELECTOR,
        '#modalBackToInitial > div > div > div.modal-footer > button.btn.btn-primary',
        4)

    consolidate_yes = Link(
        'SearchLearningUnitPage', By.CSS_SELECTOR,
        '#modalConsolidate > div > div > div.modal-footer > button.btn.btn-primary',
        4)

    def count_result(self):
        text = self.find_element(
            By.CSS_SELECTOR,
            "#main > div.panel.panel-default > div > strong").text
        return text.split()[0]

    def find_acronym_in_table(self, row: int = 1):
        selector = '#table_learning_units > tbody > tr:nth-child({}) > td.col-acronym > a'.format(
            row)
        return self.find_element(By.CSS_SELECTOR, selector).text
예제 #11
0
class LearningUnitEditPage(pypom.Page):
    actif = Checkbox(By.ID, "id_status")
    periodicite = SelectField(By.ID, "id_periodicity")
    credits = InputField(By.ID, "id_credits")
    volume_q1_pour_la_partie_magistrale = InputField(By.ID, "id_component-0-hourly_volume_partial_q1")
    volume_q1_pour_la_partie_pratique = InputField(By.ID, "id_component-1-hourly_volume_partial_q1")
    volume_q2_pour_la_partie_magistrale = InputField(By.ID, "id_component-0-hourly_volume_partial_q2")
    volume_q2_pour_la_partie_pratique = InputField(By.ID, "id_component-1-hourly_volume_partial_q2")
    quadrimestre = SelectField(By.ID, "id_quadrimester")
    session_derogation = SelectField(By.ID, "id_session")

    save_button = ButtonField(By.CSS_SELECTOR,
                              "#main > div.panel.panel-default > div.panel-heading > div > div > div > button")

    no_postponement = Link(LearningUnitPage, By.ID, "btn_without_postponement")
    with_postponement = Link(LearningUnitPage, By.ID, "btn_with_postponement")
예제 #12
0
class EducationGroupPage(CommonPageMixin, pypom.Page):
    sigleintitule_abrege = Field(
        By.CSS_SELECTOR,
        '#identification > div > div > div.row > div.col-md-7 > div:nth-child(1) > div > div.row > dl:nth-child(1) > dd'
    )
    code = Field(
        By.CSS_SELECTOR,
        '#identification > div > div > div.row > div.col-md-7 > div:nth-child(1) > div > div.row > dl:nth-child(2) > dd'
    )
    entite_de_gestion = Field(
        By.CSS_SELECTOR,
        '#identification > div > div > div.row > div.col-md-5 > div:nth-child(1) > div > dl:nth-child(1) > dd'
    )
    entite_dadministration = Field(
        By.CSS_SELECTOR,
        '#identification > div > div > div.row > div.col-md-5 > div:nth-child(1) > div > dl:nth-child(2) > dd'
    )
    actions = ButtonField(By.ID, 'dLabel')

    modify = Link('UpdateTrainingPage', By.CSS_SELECTOR, '#link_update > a', 1)
    delete = ButtonField(By.CSS_SELECTOR, '#link_delete > a', 1)
    select_first = ButtonField(By.CSS_SELECTOR, "#select_li > a", 1)

    confirm_modal = Link('SearchEducationGroupPage', By.CSS_SELECTOR, '.modal-footer>input[type=submit]')

    toggle_tree = ButtonField(By.CSS_SELECTOR, '#panel-data > div.panel-heading > div > a')
    open_first_node_tree = ButtonField(By.CSS_SELECTOR, '#panel_file_tree > ul > li > i')

    quick_search = Link(QuickSearchPage, By.ID, 'quick-search', 1)
    save_modal = Link('EducationGroupPage', By.CSS_SELECTOR, '.modal-footer > .btn-primary', 4)

    attach = Link(CopyModalPage, By.CSS_SELECTOR, 'body > ul > li:nth-child(5) > a', 2)
    detach = Link(DetachModalPage, By.CSS_SELECTOR, 'body > ul > li:nth-child(6) > a', 2)

    def get_name_first_children(self) -> list:
        children = self.find_elements(By.CSS_SELECTOR, '#panel_file_tree > ul > li > ul > li')
        return [child.text for child in children]

    def find_node_tree_by_acronym(self, acronym, parent=None):
        if not parent:
            parent = self
        else:
            parent = self.find_node_tree_by_acronym(parent)

        for node in parent.find_elements(By.CSS_SELECTOR, 'li.jstree-node'):
            if acronym == node.text.split('-')[0].strip():
                return node
        raise Exception("Node not found")

    def open_node_tree_by_acronym(self, acronym):
        node = self.find_node_tree_by_acronym(acronym)
        node.find_element(By.CSS_SELECTOR, 'i').click()

    def rigth_click_node_tree(self, acronym, parent=None):
        node = self.find_node_tree_by_acronym(acronym, parent)

        actionChains = ActionChains(self.driver)
        child = node.find_element(By.CSS_SELECTOR, 'a')
        actionChains.context_click(child).perform()
        return child

    def attach_node_tree(self, acronym, parent=None):
        self.rigth_click_node_tree(acronym, parent)
        return self.attach.click()

    def detach_node_tree(self, acronym, parent=None):
        self.rigth_click_node_tree(acronym, parent)
        return self.detach.click()

    def select_node_tree(self, acronym, parent=None):
        self.rigth_click_node_tree(acronym, parent)
        self.find_element(By.CSS_SELECTOR, 'body > ul > li:nth-child(1) > a').click()
        time.sleep(1)

    @property
    def loaded(self) -> bool:
        return "Identification" in self.find_element(
            By.CSS_SELECTOR, 'li.active[role=presentation]'
        ).text and not self.find_element(By.ID, 'modal_dialog_id').is_displayed()
예제 #13
0
class NewPartimPage(NewLearningUnitPage):
    code_dedie_au_partim = InputField(By.ID, "id_acronym_2")
    save_button = ButtonField(By.XPATH,
                              '//*[@id="LearningUnitYearForm"]/div[1]/div/div/div/button')