selenium获取元素封装

背景

在功能自动化这里,不管是selenium还是robotframework等各种开源框架,他们提供的获取元素方法有很多,但是这些框架的函数都抽象的相对原子化,比如通过id获取元素那他就是单纯传入id定位来获取dom元素,这个过程如果元素找不到,比如不可见、不可点击等等,那就是直接抛异常,然后用例也就出错了。
那么面临这样的问题,通常就会有两个方案,一个是在原有基础上二开,另一个就是自己造轮子写一个框架,早期我也写过几个这样那样的框架,他们都放在github(可以搜kangpc,不过都没维护),这都不是重点,这里我只是记录下早期封装的一个通用的获取元素的方法,代码如下:

from selenium.webdriver.support.ui import WebDriverWait

# 获取单个页面元素对象
def getElement(driver, locationType, locatorExpression):
    try:
        element = WebDriverWait(driver, 30).until(
            lambda x: x.find_element(by=locationType, value = locatorExpression))
        return element
    except Exception as e:
        raise e

# 获取多个相同页面元素对象,以list返回
def getElements(driver, locationType, locatorExpression):
    try:
        elements = WebDriverWait(driver, 30).until(
            lambda x:x.find_elements(by=locationType, value = locatorExpression))
        return elements
    except Exception as e:
        raise e

if __name__ == '__main__':
    from selenium import webdriver
    # 进行单元测试
    driver = webdriver.Chrome(executable_path="D:\python37\chromedriver.exe")
    driver.get("http://www.baidu.com")
    searchBox = getElement(driver, "id", "kw")
    # 打印页面对象的标签名
    print(searchBox.tag_name)
    aList = getElements(driver, "tag name", "a")
    print(len(aList))
    driver.quit()
posted @ 2022-04-05 19:06  我是一言  阅读(50)  评论(0编辑  收藏  举报