def select(self, member_name):
     """Selects dropdown element based on dropdown element name."""
     for el in self.elements_dropdown:
         if el.get_attribute("value") == member_name:
             el.click()
             break
     else:
         exceptions.NoSuchElementException(member_name)
 def get_clickable_element_with_xpath(self, xpath, timeout=TIMEOUT_5):
     try:
         return WebDriverWait(self._driver, timeout).until(
             method=expected_conditions.element_to_be_clickable(
                 (By.XPATH, xpath)),
             message="method -> element_to_be_clickable. xpath -> " + xpath)
     except exceptions.TimeoutException as e:
         raise exceptions.NoSuchElementException(msg=e.msg)
Beispiel #3
0
 def click_on_project(self, name):
     for item in self.menu_items:
         if item.text == name:
             item.click()
             break
     else:
         raise exceptions.NoSuchElementException(
             "Not found element with text: %s" % name)
Beispiel #4
0
 def get_random_select_job_course(self):
     """
     随机选择一节就业课
     :return:
     """
     job_courses = self.driver.find_elements_by_css_selector("li.courseDetail")
     if len(job_courses) == 0:
         raise exceptions.NoSuchElementException("就业课列表没有找到任何就业课,请检查是否存在问题")
     return job_courses[random.randint(0, len(job_courses) - 1)]
 def get_list_of_elements_with_xpath(self, xpath, timeout=TIMEOUT_5):
     try:
         return WebDriverWait(self._driver, timeout).until(
             method=expected_conditions.presence_of_all_elements_located(
                 (By.XPATH, xpath)),
             message="method -> presence_of_all_elements_located. xpath -> "
             + xpath)
     except exceptions.TimeoutException as e:
         raise exceptions.NoSuchElementException(msg=e.msg)
def get_elements(name, variables=None, global_variables=None):
    found, variable_ = get_variable(name, variables, global_variables)
    if isinstance(variable_, WebElement):
        elements = [variable_]
    elif isinstance(variable_, list) and isinstance(variable_[0], WebElement):
        elements = variable_
    else:
        raise exceptions.NoSuchElementException('变量【{}】不包含元素对象'.format(name))
    return elements
Beispiel #7
0
    def full_screen_scroll_to_target(self,
                                     page_name,
                                     target_loc,
                                     keyword,
                                     wait_loc=None,
                                     model="down",
                                     duration=200,
                                     timeout=30,
                                     polling=0.5):
        """Swipe in specify the direction until you find the target

        :param page_name:
        :param target_loc:
        :param keyword: Used to match the target page source
        :param wait_loc: Waiting for location must be on every page view
        :param model: direction of the page, option: 'down', 'top', 'left', 'right'
        :param duration:
        :param timeout:
        :param polling:
        :return:
        """
        if wait_loc:
            self.wait_ele_visible(page_name, wait_loc, model="all")
        new = self.get_page_source
        old = ""
        times = 0
        try:
            while keyword not in new and new != old:
                self.full_screen_scroll(page_name, model, duration, timeout,
                                        polling)
                if wait_loc:
                    self.wait_ele_visible(page_name, wait_loc, model="all")
                old, new = new, self.get_page_source
                times += 1
                logger.debug(
                    f"Page: {page_name} Action:[full_screen_scroll_to_target]\n"
                    f"Msg: Full screen scrolling times:{times}")
            if keyword not in new:
                logger.error(
                    f"Page: {page_name} Action:[full_screen_scroll_to_target]\n"
                    f"Msg: keyword:{keyword} not found")
                raise exceptions.NoSuchElementException(
                    f"keyword:{keyword} not found")
            ele = self.find_ele(page_name, target_loc, timeout, polling)
        except exceptions.NoSuchElementException as e:
            logger.error(
                f"Page: {page_name} Action:[full_screen_scroll_to_target]\n"
                f"Msg:No keywords [{keyword}] found [{target_loc}] in screen scrolling! Track:{e}"
            )
            self.capture_screen_shot(page_name)
            raise e
        else:
            logger.info(
                f"Page: {page_name} Action:[full_screen_scroll_to_target]\n"
                f"Msg: Find the target locator {target_loc}")
            return ele
    def find_element_by_text(self, text):
        """
        Returns first element on page or in element containing ``text``.

        .. versionadded:: 2.0
        """
        elms = self.find_elements_by_text(text)
        if not elms:
            raise selenium_exc.NoSuchElementException(u'No element containing text "{}" at {}.'.format(force_text(text), self.current_url))
        return elms[0]
Beispiel #9
0
    def _FindElement(self, selector):
        try:
            selector_type, effective_selector = selector.split("=", 1)
        except ValueError:
            effective_selector = selector
            selector_type = None

        if selector_type == "css":
            elems = self.driver.execute_script(
                "return $(\"" + effective_selector.replace("\"", "\\\"") +
                "\");")
            elems = [e for e in elems if e.is_displayed()]

            if not elems:
                raise exceptions.NoSuchElementException()
            else:
                return elems[0]

        elif selector_type == "link":
            links = self.driver.find_elements_by_partial_link_text(
                effective_selector)
            for l in links:
                if l.text.strip() == effective_selector:
                    return l
            raise exceptions.NoSuchElementException()

        elif selector_type == "xpath":
            return self.driver.find_element_by_xpath(effective_selector)

        elif selector_type == "id":
            return self.driver.find_element_by_id(effective_selector)

        elif selector_type == "name":
            return self.driver.find_element_by_name(effective_selector)

        elif selector_type is None:
            if effective_selector.startswith("//"):
                return self.driver.find_element_by_xpath(effective_selector)
            else:
                return self.driver.find_element_by_id(effective_selector)
        else:
            raise ValueError("unknown selector type %s" % selector_type)
Beispiel #10
0
    def get_random_select_job_course_is_expired_status(self):
        """
        随机选择就业课的学习状态=“课程已过期”的就业课
        :return:
        """
        expired_status = self.driver.find_elements_by_link_text("课程已过期")
        if len(expired_status) == 0:
            raise exceptions.NoSuchElementException("该账号下没有学习状态为课程已过期的就业课")
        job_courses_expired = expired_status[random.randint(0, len(expired_status) - 1)]

        return job_courses_expired
    def get_current_teachers_category(self):
        """
        获取当前选中的教师方向名称

        :return:
        """
        category_name = self.driver.find_elements_by_css_selector("div.yui3-u-7-8 li a[class='on']")
        if not category_name:
            raise exceptions.NoSuchElementException("没有找到选中的教师方向")

        return category_name[0]
Beispiel #12
0
    def get_random_select_job_course_is_learning_status(self):
        """
        随机选择就业课的学习状态=“开始学习”的就业课
        :return:
        """
        learning_status = self.driver.find_elements_by_link_text("开始学习")
        if len(learning_status) == 0:
            raise exceptions.NoSuchElementException("该账号下没有学习状态为正在学习的就业课")
        learning_study = learning_status[random.randint(0, len(learning_status) - 1)]

        return learning_study
    def act_click_next_course(self):
        """
        点击进入下一课

        :return:
        """

        next_course = self.get_next_course()
        if next_course is None:
            raise exceptions.NoSuchElementException("该岗位课没有下一课")
        else:
            next_course.click()
Beispiel #14
0
    def get_current_sub_category(self) -> WebElement:
        """
        获取当前选中的课程分类
        :return: 
        """
        category = self.driver.find_elements_by_xpath(
            '//*[@id="leftContent"]/dl/dd[2]/div/a[@class="on"]')

        if not category:
            raise exceptions.NoSuchElementException('没有找到被选中的课程分类')

        return category[0]
    def get_random_post_for_posts(self):
        """
        从帖子列表随机选择帖子
        :return:
        """
        posts_list = self.driver.find_elements_by_css_selector(
            "ul.open-sec2-list li")
        if len(posts_list) == 0:
            raise exceptions.NoSuchElementException("当前搜索结果下没有相关帖子")
        post = posts_list[random.randint(0, len(posts_list) - 1)]

        return post
Beispiel #16
0
    def get_random_course_video(self):
        """
        随机选择课程
        :return:
        """

        courses = self.driver.find_elements_by_css_selector("ul.box-img li")
        if len(courses) == 0:
            raise exceptions.NoSuchElementException("没有找到任何课程")
        course = courses[random.randint(0, len(courses) - 1)]

        return course
    def act_click_buy_button(self) -> None:
        """
        点击购买按钮.

        :return void:
        """
        button = self.get_buy_button()

        if button is None:
            raise exceptions.NoSuchElementException('没有找到购买按钮')

        button.click()
Beispiel #18
0
    def get_random_course_pages(self):
        """
        随机选择课程分页
        :return:
        """

        pages = self.driver.find_elements_by_css_selector("ul.yiiPager li")
        if len(pages) == 0:
            raise exceptions.NoSuchElementException("没有找到任何任何分页")
        page = pages[random.randint(2, len(pages) - 1)]

        return page
Beispiel #19
0
    def get_select_job_course_note(self, index=None):
        """
        随机选择课程笔记\问答\评论
        :param index:
        :return:
        """
        notes = self.get_job_course_all_notes_or_QA_or_review()
        if len(notes) == 0:
            raise exceptions.NoSuchElementException("该就业课下没有笔记")
        note = notes[index if index is not None else random.randint(0, len(notes) - 1)]

        return note
    def get_random_teacher_for_teachers(self):
        """
        从教师列表页随机选择教师
        :return:
        """
        teachers = self.driver.find_elements_by_css_selector(
            "ul.teacher-list li")
        if len(teachers) == 0:
            raise exceptions.NoSuchElementException("当前搜索结果下没有教师")

        teacher = teachers[random.randint(0, len(teachers) - 1)]

        return teacher
Beispiel #21
0
    def get_random_same_teacher_direction(self):
        """
        随机获取同方向其他讲师
        :return:
        """
        same_teachers = self.driver.find_elements_by_css_selector(
            "yui3-u-4-17 div.contents:first-child li")

        if len(same_teachers) == 0:
            raise exceptions.NoSuchElementException("没有找到同方向的讲师")
        same_teacher = same_teachers[random.randint(0, len(same_teachers) - 1)]

        return same_teacher
    def get_random_teachers_category(self):
        """
        随机获取教师方向

        :return:
        """
        teachers_category = self.driver.find_elements_by_css_selector("div.yui3-u-7-8 li")
        if len(teachers_category) == 0:
            raise exceptions.NoSuchElementException("没有找到课程方向")

        teacher_category = teachers_category[random.randint(1, len(teachers_category) - 1)]

        return teacher_category
    def get_random_post_courses_course_details_page(self, course_chapter):
        """
        从岗位课中随机获取某个课程
        :return:
        """

        courses = course_chapter.find_elements_by_css_selector(
            "dl.list-course-box dt")
        if len(courses) == 0:
            raise exceptions.NoSuchElementException("该章节下没有课程,请联系业务老师进行处理")
        course = courses[random.randint(0, len(courses) - 1)]

        return course
Beispiel #24
0
    def get_random_course(self) -> WebElement:
        """
        随机获取课程
        :return WebElement:
        """

        courses = self.get_current_page_courses()
        if 0 == len(courses):
            raise exceptions.NoSuchElementException('没有找到任何课程')

        get_course = courses[random.randint(0, len(courses) - 1)]

        return get_course
    def get_random_course_label_for_courses(self):
        """
        从课程列表中随机选择课程标签
        :return:
        """
        course = self.get_random_course_for_search_courses()
        courses_label = course.find_elements_by_css_selector(
            "div.search-c-tag a")
        if courses_label == 0:
            raise exceptions.NoSuchElementException("该课程下没有课程标签")

        course_label = courses_label[random.randint(0, len(courses_label) - 1)]

        return course_label
Beispiel #26
0
    def _get_job_course_link(self, job_course, text, exception):
        """
        查找指定的链接
        :param job_course:
        :param text:
        :param exception:
        :return:
        """
        links = job_course.find_elements_by_css_selector("ul.courseNote li a")

        for link in links:
            if "{0}.shtml".format(text) in link.get_attribute("href"):
                return link
        raise exceptions.NoSuchElementException(exception)
    def get_random_post_course(self):
        """
        随机选择岗位课.
        :return:
        """

        pose_courses_frame = self.get_random_post_courses()
        pose_courses = pose_courses_frame.find_elements_by_css_selector("div.img-content p a")
        if len(pose_courses) == 0:
            raise exceptions.NoSuchElementException("该岗位模块下没有岗位课")

        pose_course = pose_courses[random.randint(0, len(pose_courses) - 1)]

        return pose_course
    def get_random_post_courses(self):
        """
        随机选择岗位系列课程模块.

        :return:
        """

        post_courses_list = self.driver.find_elements_by_css_selector("div.module")
        if len(post_courses_list) == 0:
            raise exceptions.NoSuchElementException("岗位课首页没有岗位模块")

        post_courses_frame = post_courses_list[random.randint(0, len(post_courses_list) - 1)]

        return post_courses_frame
    def get_random_course_for_search_courses(self):
        """
        从课程列表随机选择课程
        :return:
        """

        courses = self.driver.find_elements_by_css_selector(
            "ul.search-course li")
        if len(courses) == 0:
            raise exceptions.NoSuchElementException("当前搜索结果下没有课程")

        course = courses[random.randint(0, len(courses) - 1)]

        return course
Beispiel #30
0
    def get_job_course_note_index(self, note):
        """
        获取笔记在笔记列表中的索引
        :param note:
        :return:
        """
        notes = self.get_job_course_all_notes_or_QA_or_review()

        for _note in notes:
            if note.find_element_by_css_selector('input[name=id]').get_attribute('value') \
                    == _note.find_element_by_css_selector('input[name=id]').get_attribute('value'):
                return notes.index(_note)

        raise exceptions.NoSuchElementException("没有在当前笔记列表找到该笔记")