zoukankan      html  css  js  c++  java
  • 三种等待方式:强制等待、显式等待、隐式等待

    
    

      我们在使用selenium的时候,会遇到一种定位不到的情况,因为web页面有一个加载的过程 当页面元素未出现时,

      去定位肯定是定位不到的,所以我们需要用到了‘等待’,该如何使用等待呢,让我们一起来探讨一下吧!

    time.sleep()强制等待

      time模块,是python专门用来处理时间的内建库。

      我们可以使用它时需要导入  import   time

      time.sleep(2) 意思是强制休眠2秒种的时间

      这样等待的弊端是,我们已经定位到元素的时候,还会继续等待,导致我们工作效率很低 所以WebDriver提供了两种类型的等待:隐式等待和显式等待

    implicitly_wait()隐式等待

      该方法来实现隐式等待,默认参数的单位为秒,如里面的参数设置等待时长为10秒。  

      当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;

      如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,

      若直到超出设置时长(10秒)还没有定位到元素,则抛出异常  

      该等待设置完是对整个全局起作用,所以只需设置一次即可,不需要导入任何模块,直接使用

    WebDriverWait():显式等待

      是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔0.5时间检测一次特定的元素是否存在,

      如果在设置的时间内找到了元素,则直接执行。如果超过设置最长等待时间检测不到则抛出异常。

      默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。

      该方法需要导入By 、WebDriverWait 、expected_conditions

     下面的代码是对三种等待的具体例子:

      from selenium import webdriver

      from selenium.webdriver.common.by import By

      from selenium.webdriver.support.ui import WebDriverWait

      from selenium.webdriver.support import expected_conditions as EC

      import time

      driver=webdriver.Chrome() driver.implicitly_wait(5) #隐式等待

      driver.get('http://www.baidu.com')

      time.sleep(3) #强制等待

      driver.find_element_by_id('kw').send_keys('特朗普')

      #每隔0.5秒检查一次(默认就是0.5秒。也可以修改),最多等待10秒,直到找到ID="su"元素就执行,否则抛出异常

      element=WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located((By.ID,'su'))) #显式等待

      element.click()

      time.sleep(2)

      driver.quit()

    补充一点

    presence_of_element_located           检查元素是否存在,但是并不一定可见。

    visibility_of_element_located              检查元素存在,并且可见于页面,也就是能定位到它

    
    
  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/king2/p/13589457.html
Copyright © 2011-2022 走看看