selenium测试用例编写、隐式等待、显式等待

1.测试用例编写

用例的关键要素:

1)导入依赖

2)创建driver

3)执行自动化步骤

4)断言

如下图是一个简单的demo:

self.driver.maximize_window()最大化窗口页面,一般会存在于setup方法中
如果不添加teardown原来跑完的页面不会进行自动退出的,原页面资源没有自动回收;因此如果不想让浏览器自动退出的时候就不用添加teardown方法;一般情况下是要加的
 2.直接等待、隐式等待、显式等待
直接等待:直接导入time模块使用
 
隐式等待:
  • 含义:就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。
  • self.drivers.implicitly_wait(5),单位是秒
  • 这个是全局的,只要写在开头,每个代码间的等待时间都是5秒
  • 如果找到的元素,就不用等待5秒
  • 有时候会导致明明找到元素,但是却报错了,隐式等待估计是识别到了这个元素可见,也就是expected_conditions.visibility_of_element_located,但不关注其他元素的属性,比如可点击

Self.driver.implicity.wait(5)隐式等待,打开新页面的时候动态的等待页面元素,如果等待1s或者2s的时候打开页面将继续执行,最大等待5秒钟,存在于全局的变量;而直接等待就是等待5s,如果没打开页面也会抛异常

缺点:1)全局的,因此如果有的页面等待时间较长,或者因为网络的原因、找不到元素等,一直处于等待中;2) 隐式等待不能判断页面的元素是否可点击的,想要判断还需要其他的方法⚠️
显式等待:
  • 就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么久跳出Exception
  • 下面的代码演示了By的使用、WebDriverWait显示等待、expected_conditions的使用
  • until(里面的函数返回值只有Ture和False)
只设置隐式等待往往会有问题, 建议可以在全局中设置一个小的等待时间,再设置显式等待
 如下demo:
1)从这段代码可以看出来 python的一个特性就是可以传递函数,可以把函数当作参数传递进来,wait,就是那个参数, ⚠️❗️python传参数一定不要写括号,写括号就是调用的意思了,
2)注意⚠️find_element和find_elements的区别,一个返回一个元素,一个返回一组元素,以列表的形式返回;
3)wait函数,>=1代表找到一个或多个,就是找到了一个的时候,就返回,len()>=1返回的是一个布尔值,【until(里面的函数返回值只有Ture和False)】, 如果设置成>1,而这个元素只有一个,将会一直找,找10s后还是没有找到,就报错退出
4) 一定要注意:wait(x)中一定要加上参数x,尽管没有被使用,因为until调用waitr()的时候把self.driver传给了wait()中的x参数
 另外可以通过
WebDriverWait(self.driver, 10).until(
expected_conditions.element_to_be_clickable((By.XPATH, '//*[@class="pull-right hidden-xs"]')))可以查找页面中的某一元素是否可点击来判断是否可以进行下一步操作
 
点击expected_conditions.还可以看到有一些其他方法,至于如何使用可以查看源码
 
posted @ 2020-03-31 12:27  zhaikunkun  阅读(228)  评论(0)    收藏  举报