在网上发现一博客对selenium各种等待的总结。末了,他说:
UI自动化的弊端
1.维护成本大(产量不高)
a.代码没做任何的解耦
b.没有框架的思想,纯粹在堆代码(pageobject)
根据项目的每个页面,抽象出类,每个功能点抽象出这个类的函数
c.web开发会变更html接口,或进行修改
css_selector的定位方式,尽量减轻层级定位的使用次数
2.代码爱报错
WebDriverWait每隔几秒钟扫描一次,如果超时了,则报timeout的错误
css_selector的定位方式,尽量减轻层级定位的使用次数
我也深有同感。让做开发的又转行做测试,写测试代码。虽然很容易上手,但味同嚼蜡。纵观全项目,没有任何逻辑性,只是找元素,输入内容,操作,断言。全部都是如此,纯粹堆代码。很乏味,很无聊。但是看到自己写完之后,以前手工反复做的事情,现在运行代码后就能自动完成,反复运行,代替了手工点点点,还有挺欣慰的。
不管怎么说,先完全掌握再来讨论是否喜欢。
selenium中的等待有三种。见代码:
class BoxDriver:
def __init__(self,browser_type,url):
if browser_type == "Chrome":
driver = webdriver.Chrome()
elif browser_type == "Firefox":
driver = webdriver.Firefox()
else:
driver = webdriver.Ie()
try:
self._base_driver = driver
except:
raise NameError("请输入 一个浏览器")
#隐式等待
driver.implicitly_wait(10)
driver.maximize_window()
driver.get(url)
sleep(2)
def implicitly_wait(self,second):
'''
隐式等待,针对此浏览器的每一个元素。
如果找不到,则等待几秒再找
:param second:
:return:
'''
self._base_driver.implicitly_wait(second)
def wait(self,second):
'''
固定等待
:param second:
:return:
'''
sleep(second)
def webdriver_wait(self,selector):
'''
每隔0.5秒尝试定位一次,最多定位10次。
如果还是找不到,则报错
:param selector:
:return:
'''
locator = self._convert_selector_tolocator(selector)
WebDriverWait(self._base_driver,10,0.5).until(
EC.presence_of_element_located(locator)
)
以下链接似乎更详细,有兴趣再移步继续学习。