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)
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)
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
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]
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)
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]
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()
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
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()
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
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
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
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
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
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("没有在当前笔记列表找到该笔记")