selenium时间等待方法
admin
2023-03-31 10:01:48
0

在UI自动化测试中,必然会遇到环境不稳定、网络慢等情况。当你觉得定位没有问题,但程序却直接报了元素不可见时,那你就需要思考是否因为程序运行太快或者页面加载太慢而造成了元素不可见,必须要再等待直至元素可见和程序继续运行。而在Selenium中,三种常见的等待方式都有各自的优点或缺点,可以在了解后尝试针对不同的情况选择最优的等待方式。


1.强制等待(sleep)

设置等待最简单的方法就是强制等待,其实就是time.sleep()方法,不管它什么情况,让程序暂停运行一定时间,时间过后继续运行;缺点是不智能,设置的时间太短,元素还没有加载出来,那照样会报错;设置的时间太长,则会浪费时间,不要小瞧每次几秒的时间,case多了,代码量大了,很多个几秒就会影响整体的运行速度了;所以尽量少用这个。


#-*- coding:utf-8 -*-

import time

from datetime import datetime

print (datetime.now())   #获取当前时间

time.sleep(10)           #设置等待时间10s

print(datetime.now())    #再次获取当前时间

代码很简单,主要是获取当前时候后设置了一个等待时间,然后在等待时间后面设置一个事物,这个事物来查看等待时间结束后的当前时间。通过执行结果我们很好地看到只有执行完毕等待以后才会再次执行下一步骤。


2.隐性等待(implicitly_wait())

隐式等待实际是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。这样的隐式等待会有个坑,我们都知道js一般都是放在我们的body的最后进行加载,实际这是页面上的元素都已经加载完毕,我们却还在等待全部页面加载结束。


# -*- coding: utf-8 -*-  

from selenium import webdriver

import time

 

driver = webdriver.Chrome()  

driver.implicitly_wait(20) # 隐性等待,最长等30秒  

driver.get('https://www.baidu.com')

time.sleep(3)

driver.quit()

隐式等待对整个driver周期都起作用,在最开始设置一次就可以了。不要当作固定等待使用,到哪都来一下隐式等待。


3.显示等待方式(WebDriverWait)

就是明确的要等待的元素在规定的时间之内都没找到,那么就抛出Exception.代码示例如下:


# -*- coding: utf-8 -*-  

from selenium import webdriver  

from selenium.webdriver.support.wait import WebDriverWait  

from selenium.webdriver.support import expected_conditions as EC  

from selenium.webdriver.common.by import By  

driver = webdriver.Firefox()

driver.get('https://huilansame.github.io')  

WebDriverWait(driver,20,0.5).until(

    EC.presence_of_element_located((By.LINK_TEXT, 'CSDN')))  

print driver.find_element_by_link_text('CSDN').get_attribute('href')

driver.close()

WebDriverWait(driver,20,0.5).until(expected_conditions.presence_of_element_located(locator)),selenium中的wait模块的WebDriverWait()方法,配合until或者until_not方法,再辅助以一些判断条件,就可以构成这样一个场景:每经过多少秒就查看一次locator的元素是否可见,如果可见就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常;当然也可以判断某元素是否在规定时间内不可见等等的各种场景吧,需要根据你自己实际的场景选择判断条件;


4.总结

隐式等待会等driver完全加载完成(如js、css等);显示等待仅仅校验需要加载的元素是否存在;强制等待字面很好理解,就不多说。大家可根据需求自行选择。下期预告:selenium多窗口切换方法。



相关内容

热门资讯

终于明白“神赚棋牌怎么开挂?”... 您好:神赚棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游戏...
终于明白“相约福建麻将究竟有挂... 家人们!今天小编来为大家解答相约福建麻将透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里...
玩家分享攻略“闽游麻将开挂器?... 您好:闽游麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
【第一财经】“小白大作战到底有... 有 亲,根据资深记者爆料小白大作战是可以开挂的,确实有挂(咨询软件无需打...
玩家分享攻略“同城游熟人麻将有... 家人们!今天小编来为大家解答同城游熟人麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪...
玩家最新攻略“云圈丰城麻将是不... 有 亲,根据资深记者爆料云圈丰城麻将是可以开挂的,确实有挂(咨询软件无需...
玩家攻略科普“新版悟空开挂神器... 有 亲,根据资深记者爆料新版悟空是可以开挂的,确实有挂(咨询软件无需打开...
今日重磅消息“新西游牛牛怎么装... 有 亲,根据资深记者爆料新西游牛牛是可以开挂的,确实有挂(咨询软件无需打...
玩家攻略科普“决胜麻将到底有挂... 网上科普关于“决胜麻将有没有挂”话题很是火热,小编也是针对决胜麻将作*弊开挂的方法以及开挂对应的知识...
今日重大消息“新大圣牛牛有挂吗... 有 亲,根据资深记者爆料新大圣牛牛是可以开挂的,确实有挂(咨询软件无需打...