不得不说的三大等待操作

之前有总结到说定位元素的方法,我习惯是用xpath的,上篇文章已经提到过怎么用xpath来定位,在我们做UI自动化,定位到了元素,但是在页面中元素不一定被渲染出来了,这个时候我们运行脚本肯定会给你报错的,那么我们怎么解决这种问题呢?

selenium中有三大定位方式可以解决这种问题:

  • 强制等待
  • 隐性等待
  • 显性等待

这三种方式都是可以解决这种问题的,简单说下这三种方式的用法以及适用场景吧

1、强制等待

  强制等待我们一般在做UI自动化用的也多,但是对于这个时间一般是很少的,强制等待的意思是运行到了这行代码后,你就必须要停止多少秒之后才能运行,这种缺失是比较强制吧,哈哈哈。。。

import time


time.sleep(5) # 强制等待5秒

用法就是上面这种,time.sleep(5)就是强制等待5秒,也就是5秒之后你才能去运行下一行代码

2、隐性等待

  隐性等待的意思是等待的时间不会暴露出来,也就是悄悄的等,不会让你发现,等页面加载好了之后就会进行下一步操作,如果设定的时间还没有等到页面加载完,那么就会抛出异常,也就是最多会等待你设定的时间,超出这个时间后就会报错

from selenium import webdriver


driver = webdriver.Chrome()
driver.implicitly_wait(10)   # 隐性等待10秒钟

3、显性等待

扫描二维码关注公众号,回复: 7950736 查看本文章

  显性等待的意思就是在我们的代码中可以设置一个元素,设定时间,和循环周期,比如下面的代码:

使用显性等待的话我们需要导入下面几个包,expected_conditions这个里面有很多的检查方式,我这里只是列举了一个检查到元素存在的方式(具体可以看看源码哈,方式很多,根据具体的方式选择),在WebDriverWait这个类里面我们需要传递三个参数(会话、总共等待的时间,循环时间)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait


driver = webdriver.Chrome()
driver.get("https://ke.qq.com/")  # 打开腾讯课堂
first_login = (By.XPATH, '//a[@class="mod-header__link-login js-login-op"]')   # 腾讯课堂首页登录按钮
WebDriverWait(driver, 10, 0.5).until(EC.presence_of_element_located(first_login))   # 显性等待到登录按钮加载出来,没隔0.5检查一共10秒

在以上这三种等待方式中我们一般常用的是显性等待,当然这三种方式都是可以共同用的。

猜你喜欢

转载自www.cnblogs.com/LCboss/p/11917876.html