首页 > 解决方案 > Selenium:通过存在_of_element_located() 聚合Selenium

问题描述

我正在用 Python 尝试 Selenium。有没有办法进一步简化代码?

CLASS_NAME = "CLASS_NAME"
CSS_SELECTOR = "CSS_SELECTOR"
ID = "ID"
def check_element_type(element_type, element_string):
    if element_type == CLASS_NAME:
        return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((By.CLASS_NAME, element_string)))
    elif element_type == CSS_SELECTOR:
        return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((By.CSS_SELECTOR, element_string)))
    elif element_type == ID:
        return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((By.ID, element_string)))  

这是概念目标,但它不起作用

def get_element(element_type, element_string):  
    return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((By.element_type, element_string)))  

selenium.webdriver.common.by如果我在具有相同名称的常量字符串时显式导入,则会引发错误CLASS_NAME = "CLASS_NAME"CSS_SELECTOR = "CSS_SELECTOR"

标签: pythonselenium

解决方案


返回By字符串

class By(object):
    """
    Set of supported locator strategies.
    """

    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"

在您的方法中更改By.element_typeelement_type

def get_element(element_type, element_string):  
    return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((element_type, element_string)))

并像使用它一样

element = get_element("css selector", "div.myClass")
element = get_element("class name", "myClass")
element = get_element("xpath", "//div[@='myClass']")

或者

CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
element = get_element(CSS_SELECTOR, "div.myClass")
element = get_element(CLASS_NAME, "myClass")

推荐阅读