自动化测试中三种等待的方式
为什么要用等待时间: 在写App的自动化的脚本时发现一个元素,但是往往执行脚本是报错( An element could not be located on the page using the given search parameters.),提示没有找到元素这时就可能出现时而能点击,时而又不能点击到,原因是:因为元素还没有被加载出来,查找的代码就已经被执行了,自然就找不到元素了.解决方式:可以用等待,等元素加载完成后再执行查找元素语句。 三种等待的方式: 1、强制等待
导入定时等待库
from time import sleep 或者 import time
time.sleep(10) # 表示强行等待10s在执行下一句代码 这种等待方式时间到了就会执行下个语句,但比较死板,不能保证在等待的时间内元素真正被加载了出来。而且如果等待的元素已经被加载出来,还需要等待到时间才会执行下一句,浪费时间。
2、 隐式等待
driver.implicitly_wait(30) #等待30s 这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。 这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。 3、显式等待
需要导入的包
from selenium.webdriver.support.wait import WebDriverWait #导入显性等待的包
from selenium.webdriver.support import expected_conditions as EC #判断所需要的元素是否已经被加载出来
from selenium.webdriver.common.by import By #定位
WebDriverWait,配合该类的until()和until_not()方法,表示程序每隔x秒去判断一下指定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,指定时间截止。如果超时就会抛出异常。 until()和until_not()方法 until() 判断,直到返回值为true,执行下一步 nutil_not 判断,直到返回值为false 执行下一步 如下: 笼统的来概括为: 强制等待:傻瓜式等待,不智能 隐式等待:全局通用,只需设置一次,很智能(等到了就走,不会浪费时间),不足之处:只能用来查找元素,等待元素是否能找到。 显式等待:等待元素处于特定条件的时候使用,很智能(等到了就走,不会浪费时间)