Selenium等待的方式有哪些,各有什么特点
Admin 2022-09-08 群英技术资讯 742 次浏览
今天这篇给大家分享的知识是“Selenium等待的方式有哪些,各有什么特点”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“Selenium等待的方式有哪些,各有什么特点”文章能帮助大家解决问题。from time import sleep sleep(3) # 强制等待3秒
缺点:由于Web加载的速度取决于测试的硬件、网速、服务器的响应时间等因素。如果等待时间太长,容易造成时间浪费,如果等待时间太短又可能会造成在web还没有加载完所需要定位的element,而出现报错。
由于等待时间无法确定,使用太多的sleep会影响运行速度,大大地降低效率,所以建议测试中尽量少使用强制等待。
# 隐式等待10s driver.implicitly_wait(10)
简介:隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10秒内出现,则继续向下,否则抛异常。可以理解为在10秒以内,不停刷新看元素是否加载出来。
使用场景:隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效,后面不用重复声明。隐式等待存在一个问题,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,仍得等到页面全部完成才能执行下一步。
简介:显示等待是单独针对某个元素,设置一个等待时间如5秒,每隔0.5秒检查一次是否出现,如果在5秒之前任何时候出现,则继续向下,一般需要配合该类的 until() 和 until_not() 方法一起用,直到超过设置的最长时间,然后抛出超时错误 TimeoutException,以下介绍几个最常用的方法:
1. 判断element是否可见:visibility_of_element_located(locator) (可见代表element非隐藏,并且element宽和高都不等于 0)
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
# 示例
target = EC.visibility_of_element_located(By.ID,'user')
# 配合until()使用(等待元素可见)
# 5表示 最长超时时间,默认以秒为单位; 1表示检测的间隔步长,在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False.
WebDriverWait(driver, 5, 1).until(EC.visibility_of_element_located(By.ID,'user'))
# 配合until_not()使用(等待元素不可见)
WebDriverWait(driver, 5, 1).until_not(EC.visibility_of_element_located(By.ID,'user'))
# 在类中封装为一个函数
def wait_eleLocated(self, loc, timeout=30, poll_frequency=0.5, model=None):
"""
:param loc:元素定位表达;元组类型,表达方式(元素定位类型,元素定位方法),示例:(By.ID, "kw")
:param timeout:超时时间
:param poll_frequency:轮询频率
:param model:等待失败时,截图操作,图片文件中需要表达的功能标注
:return:None
"""
self.logger.info(f'等待"{model}"元素,定位方式:{loc}')
try:
start = datetime.now()
WebDriverWait(self.driver, timeout, poll_frequency).until(EC.visibility_of_element_located(loc))
end = datetime.now()
self.logger.info(f'等待"{model}"时长:{end - start}')
except TimeoutException:
self.logger.exception(f'等待"{model}"元素失败,定位方式:{loc}')
# 截图
self.save_webImgs(f"等待元素[{model}]出现异常")
raise
2. 判断某个element是否被加载到dom树:presence_of_element_located(locator) (并不代表该element一定可见)
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By target = EC.presence_of_element_located(By.ID,'user')
3. 判断某个element中是否可见并且可点击:element_to_be_clickable(locator)
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By target = EC.element_to_be_clickable(By.ID,'user')
4. 判断某个element是否被选中:element_to_be_selected(element) (一般用在下拉列表)
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
element = driver.find_element_by_class_name('selector')
EC.element_to_be_selected(element)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
9 月 10 日,张勇如期和蔡崇信完成阿里巴巴控股集团董事会主席的交接。但出人意料的是,他没有像 6 月说的 “专职担任阿里云智能集团董事长兼 CEO”,而是继续退出,以 “功勋阿里人” 的身份从阿里集团退休。
pandas中为啥尽量不使用for循环?很多新手可能对此不是很了解,其实相比使用for循环,有一些别的方法和技巧能更好的提升pandas运行时间,下面我们就一起来了解一下。
这篇文章主要为大家介绍了VGG16模型的复现及其详解(包含如何预测),有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
内容介绍事件绑定方法常用事件类型Event事件对象事件处理,是GUI程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件,而事件处理则是驱动这台机器正常&rdquo
PCA 是最常用的一种降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的方差最大,以此使用较少的维度,同时保留较多原数据的维度。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008