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多窗口切换方法。



相关内容

热门资讯

男子驾驶摩托车国道上逆行致1死... 早前报道 摩托车国道上逆行致1死1伤,骑手出事前曾做手势打招呼来源:大风新闻(2026年05月11日...
外交部:中方决定不同意台湾地区... 5月11日,外交部发言人郭嘉昆主持例行记者会。有记者问:据了解,第七十九届世界卫生大会将于5月18日...
糖果制品中检出伟哥 4月22日,上海市市场监督管理局发布2026年第13期省级食品安全抽检信息,检出3批次不合格食品,不...
伊朗副议长:我国已成为世界第四... 美伊谈判陷入僵局,伊朗拒绝了美国提出的结束战争的方案。以此同时,伊朗副议长巴巴伊5月10日强调,伊朗...
河南760亿省级财政资金定存招... 【大河财立方消息】5月11日消息,河南省财政厅公布2026年度第1期河南省省级财政专户资金定期存款代...
无忧传媒宣布与“孕妇泰国坠崖案... 据北京商报消息,5月11日,记者从无忧传媒方面获悉,目前公司与签约达人王暖暖经友好协商已确定解约。5...
米哈游:编造“皮套论”谣言构成... 【大河财立方消息】 5月11日,据米哈游法务部,近日米哈游诉网络博主许某鹏(网名“自由人米八”)、罗...
外交部介绍特朗普访华具体安排和... 5月11日,外交部发言人郭嘉昆主持例行记者会。总台央视记者提问:中方已经发布美国总统特朗普来华进行国...
61家!郑州市科技类校外培训机... 根据《河南省科技类校外培训机构设置标准和管理指南(试行)》有关规定,为落实“双减”政策要求,经科技类...
夫妻酒后各自驾车,路上相撞,双... 5月10日晚,四川夹江县公安局发布消息,该局交通管理大队于近日处理一起追尾事故时,查获一对夫妻双双酒...