背景
在功能自动化这里,不管是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()