web自动化之三大等待元素

1. sleep强制等待
代码运行到此处,会强行进行等待指定的时间,使用方便的同时,效率最低,不建议使用。
缺点:不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间),如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。
优点:使用简单,可以在调试时使用。

sleep(10)

2.implicitly_wait隐式等待

隐式等待也是设定一个固定的等待时间,对整个生命周期的元素都起作用,每一个元素都会等待加载完全,直到超过设定的等待时间。其设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步操作。
缺点:使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;但有时候页面想要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部完成才能执行下一步,使用也不是很灵活。
优点:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。
----来自Selenium官方文档的警告:
警告:不要混合使用隐式和显式等待。这样做会导致不可预测的等待时间。例如,将隐式等待设置为10秒,将显式等待设置为15秒,可能会导致在20秒后发生超时。

# 隐式等待设定时长为5s
driver.implicitly_wait(5)
driver.get('http://www.google.com')
# 隐式等待所有元素加载完成,直到超过设定的最长时间
driver.find_element_by_id("element_id").click()

3.webdriverwait显示等待
显式等待 相比隐式等待更灵活,是先设定一个条件函数和一个最长等待时长,轮询判断条件函数的返回值,如果返回 True,则开始执行后面的操作,否则会一直等待,直到超时报元素未找到异常。

element=WebDriverWait(driver,timeout=10,poll_frequency=0.5,ignored_exceptions=None).until(EC.presence_of_element_located((By.ID,
"Element")))

显示等待需要用到两个类:WebDriverWait和expected_conditions两个类

driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:轮询的间隔步长,默认为0.5s
ignored_exceptions:忽略等待时出现的特定类型的异常,默认忽略NoSuchElementExeception异常

WebDriverWait()类中有until()和until_not()方法:就能够根据判断条件而灵活地等待了。主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步;否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常。

expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件:官网文档
下面就是本人日常工作中常用到的17种条件说明:
通过页面标题判断:
1.title_is(title)
判断当前页面的title是否完全等于(==)预期字符串,返回布尔值
2.title_contains(title)
判断当前页面的title是否包含预期字符串,返回布尔值

通过元素是否可见来判断:
3.presence_of_element_located(locator)
判断某个元素是否被加到了dom树里,并不代表该元素一定可见
4.visibility_of_element_located(locator)
判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
5.visibility_of(element)
基本和上面方法效果一致,官方原文是:An expectation for checking that an element, known to be present on the DOM of a page, is visible,翻译:判断元素将会加载到页面DOM中,并可见
6.presence_of_all_elements_located(locator)
判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是’column-md-3’,那么只要有1个元素存在,这个方法就返回True
7.visibility_of_any_elements_located(locator)
判断是否至少有1个元素存在于dom树中,并且可见。
8.invisibility_of_element_located(locator)
判断某个元素中是否不存在于dom树或不可见

通过等待的元素包含的内容来判断:
9.text_to_be_present_in_element(locator, text_)
判断某个元素中的text是否 包含 了预期的字符串
10.text_to_be_present_in_element_value(locator, text_)
判断某个元素中的value属性是否 包含 了预期的字符串

针对下拉框类型的等待,还有可点击的组件,如超链接:
11.element_to_be_clickable(locator)
判断某个元素中是否可见并且是enable的,这样的话才叫clickable
12.element_to_be_selected(element)
判断某个元素是否被选中了,一般用在下拉列表
13.element_selection_state_to_be(element, is_selected)
判断某个元素的选中状态是否符合预期
14.element_located_selection_state_to_be(locator, is_selected)
跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator

其他特殊判断:
15.alert_is_present()
判断页面上是否存在alert
16.staleness_of (element)
等某个元素从dom树中移除,注意,这个方法也是返回True或False
17.frame_to_be_available_and_switch_to_it(locator)
判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值