SeldomQA / poium

Page Objects design pattern test library, support selenium、appium、playwright, etc
https://pypi.org/project/poium
Apache License 2.0
416 stars 140 forks source link

有方法可以判断element不存在吗? Element()初始化会报index out of range #39

Open Joeylu-master opened 2 years ago

Joeylu-master commented 2 years ago

`

    # selenium
    if by == "id_":
        self.__find_element((By.ID, value))
        elem = Browser.driver.find_elements(By.ID, value)[self.index]
    elif by == "name":
        self.__find_element((By.NAME, value))
        elem = Browser.driver.find_elements(By.NAME, value)[self.index]
    elif by == "class_name":
        self.__find_element((By.CLASS_NAME, value))
        elem = Browser.driver.find_elements(By.CLASS_NAME, value)[self.index]
    elif by == "tag":
        self.__find_element((By.TAG_NAME, value))
        elem = Browser.driver.find_elements(By.TAG_NAME, value)[self.index]
    elif by == "link_text":
        self.__find_element((By.LINK_TEXT, value))
        elem = Browser.driver.find_elements(By.LINK_TEXT, value)[self.index]
    elif by == "partial_link_text":
        self.__find_element((By.PARTIAL_LINK_TEXT, value))
        elem = Browser.driver.find_elements(By.PARTIAL_LINK_TEXT, value)[self.index]
    elif by == "xpath":
        self.__find_element((By.XPATH, value))
        elem = Browser.driver.find_elements(By.XPATH, value)[self.index]
    elif by == "css":
        self.__find_element((By.CSS_SELECTOR, value))
        elem = Browser.driver.find_elements(By.CSS_SELECTOR, value)[self.index]

  `

__get_element 方法如果find_elements是[], 会发生index out of range

Joeylu-master commented 1 year ago

建议改成: @defnngj

elem = Browser.driver.find_elements(By.NAME, value)[self.index] if Browser.driver.find_elements(By.ID, value) else None

licoba commented 1 year ago

有一样的问题

ryanrain2016 commented 1 year ago

建议改成: @defnngj

elem = Browser.driver.find_elements(By.NAME, value)[self.index] if Browser.driver.find_elements(By.ID, value) else None

你这是要执行两边find_elements? 那句应该改成elem = Browser.driver.find_elements(By.NAME, value),然后在最后加一句 elem = elem and elem[0] or None