def __find_element(elem): """ Find if the element exists. """ for _ in range(Seldom.timeout): elems = Seldom.driver.find_elements(by=elem[0], value=elem[1]) if len(elems) >= 1: log.info("✅ Find {number} element: {by}={value} ".format( number=str(len(elems)), by=elem[0], value=elem[1])) break else: time.sleep(1) else: error_msg = "❌ Find 0 element through: {by}={value}".format( by=elem[0], value=elem[1]) raise NotFindElementError(error_msg)
def find_element(elem): """ Find if the element exists. """ for i in range(Seldom.timeout): elems = Seldom.driver.find_elements(by=elem[0], value=elem[1]) if len(elems) == 1: log.info("✅ Find element: {by}={value} ".format( by=elem[0], value=elem[1])) break elif len(elems) > 1: log.warn("❓ Find {n} elements through: {by}={value}".format( n=len(elems), by=elem[0], value=elem[1])) break else: time.sleep(1) else: error_msg = "❌ Find 0 elements through: {by}={value}".format( by=elem[0], value=elem[1]) log.error(error_msg) raise NotFindElementError(error_msg)
def get_elements(self, index: int = None): """ Judge element positioning way, and returns the element. """ if self.by == "id_": self.__find_element((By.ID, self.value)) elem = Seldom.driver.find_elements(By.ID, self.value) elif self.by == "name": self.__find_element((By.NAME, self.value)) elem = Seldom.driver.find_elements(By.NAME, self.value) elif self.by == "class_name": self.__find_element((By.CLASS_NAME, self.value)) elem = Seldom.driver.find_elements(By.CLASS_NAME, self.value) elif self.by == "tag": self.__find_element((By.TAG_NAME, self.value)) elem = Seldom.driver.find_elements(By.TAG_NAME, self.value) elif self.by == "link_text": self.__find_element((By.LINK_TEXT, self.value)) elem = Seldom.driver.find_elements(By.LINK_TEXT, self.value) elif self.by == "partial_link_text": self.__find_element((By.PARTIAL_LINK_TEXT, self.value)) elem = Seldom.driver.find_elements(By.PARTIAL_LINK_TEXT, self.value) elif self.by == "xpath": self.__find_element((By.XPATH, self.value)) elem = Seldom.driver.find_elements(By.XPATH, self.value) elif self.by == "css": self.__find_element((By.CSS_SELECTOR, self.value)) elem = Seldom.driver.find_elements(By.CSS_SELECTOR, self.value) else: raise NameError( "Please enter the correct targeting elements,'id_/name/class_name/tag/link_text/xpath/css'." ) if index is None: return elem elif len(elem) == 0: raise NotFindElementError(self.find_elem_warn) else: return elem[index]