美文网首页
selenium三种等待方式

selenium三种等待方式

作者: cain07 | 来源:发表于2021-12-02 14:28 被阅读0次

selenium三种等待方式

很多时候,我们进行元素定位时无法按预期成功定位到元素,但是我们的代码又确保准确无误,那是什么原因呢?

其实,原因很简单,大致分为2种:
1,所定位的元素在frame/iframe中
2,未设置合理的等待

为什么未设置合理等待的时候,很有可能无法正确定位元素呢?
我们知道,代码的执行速度很快很快,但浏览器的渲染速度却相对慢了很多,这就容易导致代码执行完后还未渲染或加载成功过,从而导致无法成功定位元素。

等待分为3种:
1,强制等待
2,隐式等待
3,显示等待

1,强制等待
强制等待是最为粗暴的一种等待方式,此等待方式不管定位结果如何都会一直等待,直到等待时长结束。此种等待方式会导致程序代码中断,当等待时间结束
后才会继续往下执行。
所以,此种等待方式往往会拉低程序执行效率,拉长了测试时长。
在python种,强制等待用sleep()方法,使用此方法需导入time(import)模块或time模块中的sleep()方法(from time import sleep)。

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
sleep(3)
driver.find_element(By.ID, 'kw').send_keys("python")
driver.find_element(By.ID, 'su').click()
sleep(3)
driver.quit()

上图代码中,在打开了百度首页后,sleep3秒,在搜索完成后sleep3秒。

2,隐式等待:implicitly_wait(xx)
隐私等待会在等待时长内等待整个页面的加载完成,如果在等待时长内页面加载完成,则进行下一步。否则会一直等待页面加载完成,直到达到等待时长。
隐式等待的一个明显弊端:一定会等到页面加载完成后才会执行下一步,即使可能元素已经被找到了。
注意:
隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element(By.ID, "kw").send_keys("python")
driver.find_element(By.ID, 'su').click()

既然,隐式等待也可能会导致我们的程序运行速度变慢,那有没有更好的等待方式呢?当然,显示等待就可以。

3,显示等待:WebDriverWait,配合该类的until()和until_not()方法 显示等待会在一定的时间频率上来查看是否定位到了元素,若找到了元素则进行下一步。若未找到,则超时后抛出异常:TimeoutException
WebDriverWait类需要导入:from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait()对象需3个参数:driver, timeout,poll_frequency=POLL_FREQUENCY。
其中:driver为浏览器驱动,timeout为超时时间,poll_frequency为查询频率。
EC为exceped_conditions模块(缩写)调用presence_of_element_located()来判断元素是否已经在页面的DOM中(不需要元素在页面是
可见的),在则返回WebElement对象。

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

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
ele = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID, 'kw')))
ele.send_keys("python")

从上面示例,会在等待时长10s内,以0.5s的评论查询是否定位到元素(By.ID,'kw'),若定位到元素则停止等待执行下一步,若为找到则抛出
异常。
除了until(),还可以结合until_not()来使用。

重点:理解并熟练使用显示等待,并对涉及到的WebDriverWait类,excepted_conditions模块理解充分。 在webUI自动化中,会对元素的定位进行二次封装,而通常元素的定位就会用到显示等待,并结合try...except来捕获异常。

https://www.cnblogs.com/ctltest/p/14480682.html

相关文章

  • python + Selenium合集

    python + Selenium 合集 selenium原理,点这里selenium 三种等待方式,点这里~ 五...

  • selenium三种等待方式

    selenium三种等待方式[https://www.cnblogs.com/ctltest/p/14480682...

  • selenium 三种等待方式

    selenium 的三种等待方式 上面的隐式等待包括:WebDriverWait 默认每 500 毫秒调用一次 E...

  • selenium三种等待方式

    随着对selenium不断的深入学习,在网上搜索的资料越多,才发现自己掌握的只是冰山一角。 1、强制等待 用法:t...

  • selenium三种等待方式

    作者:Gakki 前言 在浏览器加载一个页面时,页面内得元素可能是在不同的时间载入的,这会加大定位元素的困难程度,...

  • Selenium 三种等待元素出现的方式

    Selenium 等待元素出现的方式有以下三种1、显式等待通俗点说,就是死等,很死板不灵活的等待。即在指定的时间内...

  • Selenium的三种等待方式

    直接等待 time.sleep(1),强制等待线程休眠一定时间 使用上简单粗暴 以灵题库网站账号密码登录(http...

  • Python selenium 三种等待方式解读

    我们在使用selenium的时候,很多时候会出现定位不到的时候。在大多数情况下就是两种问题:1.有frame的问题...

  • selenium 延迟等待的三种方式

    1、最直接普通的方式:这个是设置固定的等待时间 Thread.sleep(1000); 2、隐式等待方式(impl...

  • python selenium 三种等待方式详解

    引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造...

网友评论

      本文标题:selenium三种等待方式

      本文链接:https://www.haomeiwen.com/subject/hllyxrtx.html