Selenium-几种等待方式

强制等待

  一直使用的time.sleep(5),可以放在任意地方,不好的地方,不太准确确定时间

隐形等待

  driver.implicitly_wait(5)

    设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截至,然后执行下一步.注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步

    但他还有一个问题,如果你页面加载挺好的,他会一闪而过,你也看不到具体的东西

    对整个driver的周期都起作用,所以只要设置一次即可,和sleep不同

显性等待

  WebDriverWait,配合该类的unitl()和until_not()方法,就能够根据判断条件而进行灵活的等待.

如何理解?

  每隔N秒检查下,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常

  语法如下:

    from selenium.webdriver.support.wait import WebDriverWait

    WebDriverWait(driver,超时时长,调用频率).until(可执行方法,超时的时候返回的信息)

    对上述部分的解释:

      drvier:  生成的driver是什么名字,就是什么

      超时时长:  超时时长

      调用频率:  调用unitl或until_not中的方法的间隔时间,默认是0.5秒

      until是当元素出现或什么条件成立则继续执行

      unitl_not是当元素消失或什么条件不成立则继续执行

      可执行的方法:  达到条件,执行的下一步

      超时的时候返回的信息:  超时返回的异常

#! /usr/bin/env python
#coding=utf-8

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

driver = webdriver.Firefox()
#隐性等待
driver.implicitly_wait(5)
driver.get("https://www.baidu.com/")

#显性等待
#WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时").send_keys("博客园")

kw = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时")
kw.send_keys("博客园")

time.sleep(3)
driver.quit()

调试的时候用 强制等待

等调通了,再改成隐形等待或者显性等待

时间: 2024-10-10 23:10:05

Selenium-几种等待方式的相关文章

Python selenium 三种等待方式详解(必会)

很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽.说到等,又有三种等法,且听博主一一道来: 1. 强制等待

Python selenium 三种等待方式详解

1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get('https://www.xuehu365.com') sleep(3) # 强制等待3秒再

Python selenium 三种等待方式解读

1. 强制等待 第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间. 看代码: ? 1 2 3 4 5 6 7 8 9 10 11 # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get('https://huilansam

Selenium中的几种等待方式,需特别注意implicitlyWait的用法(转)

最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. private boolean isElementPresent(By by) {     try { driver.findElement(by);       return true;     } catch (NoSuchElementException e) {       return

Python selenium —— 一定要会用selenium的等待,三种等待方式解读

发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法

转:Selenium中的几种等待方式,需特别注意implicitlyWait的用法

最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. private boolean isElementPresent(By by) {     try { driver.findElement(by);       return true;     } catch (NoSuchElementException e) {       return

Selenium学习之==>三种等待方式

在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待,每一种等待都有自己的优点或缺点,我们需要选择最优的等待方式.下面我们来介绍三种等待方式. 第一种:固定等待(time.sleep()) 在开发自动化框架过程中,最忌讳使用Python自带模块的time的sleep方法进行等待,虽然可以自定义等待时间,但当网络条件良好时,依旧按照预设定的时间继续等待,

selenium3+python自动化15-三种等待方式

前言 在使用selenium自动化测试的过程中,必然会遇到环境不稳定,网络慢的情况,这时如果不做任何处理的话,经常会因代码没有找到元素而报错.这时我们就要进行设置,让其等待加载后再执行. 在Selenium中,可以用到三种等待方式:强制等待.隐式等待.显式等待,应该根据具体需求情况选择最优的等待方式. 一.强制等待:time.sleep(等待时间) 1.不管浏览器是否加载完了,程序都得等待设定的时间后才能运行 2.注意使用的时候需要先导入time模块:import time 3.这种方式的缺陷显

selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python

我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait().隐式等待implicitly_wait().强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别 在前面的博文中简单介绍了<强制等待和隐士等待的区别和理解>,本文再详细的结合案例进行理解. sleep(): 强

Selenium中的几种等待方式,需特别注意implicitlyWait的用法

转自http://blog.csdn.net/pf20050904/article/details/20052485?utm_source=tuicool 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. private boolean isElementPresent(By by) {    try { driver.findElement(b