栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Cocos2d-x

Selenium--WebDriverWait--你知道显示等待(上)?

Cocos2d-x 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Selenium--WebDriverWait--你知道显示等待(上)?

前言

这里是清安,本章,我们不说别的,就来说说selenium中的显示等待。

显示等待有什么作用?


1、可以用于作为断言的检验之一
2、显式等待比隐式等待/强制等待更节约执行时间
3、显示等待也能有效的提高代码的稳定性、健壮性

事实上,真的是这样的吗

显示等待,确实可以在一定程度上可以更好、更快的提高代码的稳定性以及健壮性。他可以减少强制等待的使用,提升代码执行时间,使得代码跑起来比使用强制等待更快。

「在很多时候,常常遇见元素未定位到的错误,经过排查,发现元素并未写错,浏览器中查看DOM,使用快捷搜索定位功能也是没问题的,但是在代码中就是定位不到。随后加上了强制等待!发现OK了,没问题了。」

上述所说,是不是你经常遇到的。是什么原因造成的呢?


最常见的就是:代码执行到位了,但是浏览器界面因为网速问题导致前端界面未加载出来(未渲染完成/元素未加载到DOM树中)


那么又想提高执行速度,又想规避这种常见的问题,怎么办?显示等待可以帮助你。「显示等待并非唯一一条途径」

解析显示等待

先看一下显示等待的源码,类中的构造函数。也就是一些必传以及非必传的参数。

def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):


driver:浏览器驱动
timeout:最大等待时间
poll_frequency:调用之前的睡眠间隔,默认0.5
ignored_exceptions:调用期间忽略的异常类的iterable结构。默认情况下,它只包含NoSuchElementException。

基本写法
WebDriverWait().until()
ignored_exceptions到底是什么

前三者可以很好的理解,最后一项ignored_exceptions,到底是怎么回事呢。

可以理解为报错信息,默认情况下呢,也就是不传参数,默认为「找不到元素时引发」当你所需要定位的参数不存在或者错误时,就会触发。

看一个小例子就能明白:

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
fox = webdriver.Firefox()
fox.get('http://shop.aircheng.com/simple/login')
loca = (By.NAME,'login_ino')
WebDriverWait(fox,5,0.5)
fox.find_element(*loca).send_keys('qingan')

这里本来元素因该是login_info的,但是我故意少写一个字母,会怎么样呢?

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="login_ino"]

跟上面所说一至,默认抛出NoSuchElementException异常。那么有其他异常怎么办。别担心,作者考虑到了,所以在源码中增加了很多的异常类,例如:NoSuchAttributeException,StaleElementReferenceException,InvalidElementStateException等。

这么多异常记不住怎么办,问题不大,用的不多,先熟练本章的内容, 后续等熟练了可自行回来深究。

此外WebDriverWait中,还提供了两个方法,一个是until一个是not until。显而易见,这两者反过来的。

WebDriverWait + until

直接看代码,更容易理解!

# 公众号:伤心的辣条
fox = webdriver.Firefox()
fox.get('http://shop.aircheng.com/simple/login')
WebDriverWait(fox,5).until(lambda x:x.find_element(By.NAME,'nihao').is_displayed(),message='元素不存在')

上面用了lambda表达式,也叫匿名函数,可作为参数传递给函数。此处暂时记住便可,后续章节会介绍其他常用的一些库中的方法一起结合使用。

message是传递的错误提示信息,可以自行写入。「需要注意的是lambda表达式后面,这里面不可带有实例化驱动的变量,例如上述的fox,否则message无法输出,会提示出其他的错误提示」

此外除了is_displayed(),另外还有两种常用的方法提供,如下:

ele.is_displayed():判断某个元素是否显示页面上 ele.is_selected():判断某个元素是否被选中
ele.is_enables():判断某个元素是否可以操作,如判断input、select等元素的可编辑状态,如按钮是否可以点击

如上述中until里面使用is_displayed是判断某个元素是否显示页面上,那么not until也就是判断某个元素是否不显示页面上。

在这里还是要推荐下我自己建的软件测试学习Q群:746506216,群里都是学测试的,如果你想学或者正在学习测试,欢迎你加入,大家都是测试党,不定期分享干货(只有软件测试相关的),包括我自己整理的一份2022最新的Python自动化测试进阶资料和零基础教学,欢迎进阶中和对测试感兴趣的小伙伴加入!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/952422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号