zoukankan      html  css  js  c++  java
  • Python自动化测试学习(七)— 元素等待的三种方式

    一、为什么设置元素等待

    目前大多数Web应用程序都是使用AJAX技术,当浏览器在加载页面时,页面内的元素可能并不是同时被加载完成的。因此当我们在网页上定位元素时,有可能网页已经打开但是元素未加载出来,定位不到元素就会抛出异常。

    二、隐式等待

    • 通过一定时长等待页面所有元素加载完成,如果超过设置的时长元素还没有被加载出来则抛出NoSuchElementException异常
    • 隐式等待是设置全局等待,默认等待时间是0s,所以只要设置一次。
    • 在规定时间范围内,浏览器不停的刷新页面,直到找到相关元素结束
    from selenium import webdriver
    from time import sleep
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    driver.get("https://www.taobao.com/")
    # 隐式等待10s
    driver.implicitly_wait(10)
    driver.maximize_window()
    # 定位淘宝网页首页轮播图
    driver.find_element_by_xpath("//div[@class='mod'][1]/ins/a").click()
    print("成功")
    driver.quit()

    三、显示等待

    • 在设置的时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间后仍检测不到元素则抛出异常。
    • 针对某个特定的元素设置等待时间,在设置的时间内,默认每隔一段时间检测一次当前某个元素是否存在,如果找到元素则立即执行,如果超时则抛出NoSuchElementException
    from selenium import webdriver
    from time import sleep
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    driver.get("https://www.taobao.com/")
    driver.maximize_window()
    # 显示等待,EC是expected_condition的别名
    element = WebDriverWait(driver, 10, 0.5).until(EC.presence_of_element_located((By.XPATH, "//div[@class='mod'][1]/ins/a")))
    print("成功")
    driver.quit()

    WebDriverWait()

      由webdriver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。格式如下:

      WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None)

    参数:

      • driver:              webdriver的驱动程序
      • timeout:             设置超时时间,默认以秒为单位
      • poll_frequency:        休眠时间(步长)的间隔,默认为0.5秒
      • ignored_exceptions:    超时后的异常信息,默认情况下抛 “NoSuchElementException". 

    until()

    WebDriverWait()一般由until或until_not配合使用
    until(method,message=’ ’) 调用该方法提供的驱动程序做为一个参数,直到返回值为True

    expected_conditions提供一些预期条件的实现

    四、强制等待

    1. 设置固定的休眠时间。脚本执行sleep()后线程休眠,另外两种不休眠
    2. 缺点:如果指定的时间过长,即使元素已被加载出来了,但还是要继续等,这样会浪费很多时间

    sleep(5): 休眠5s

  • 相关阅读:
    git撤销操作总结
    pull request的一些思考
    设计模式之门面模式
    设计模式之策略模式
    java中的堆栈
    git冲突的处理
    Eclipse 未正常退出,导致进不去的问题
    think in java读后总结---Map集合的几种遍历方式
    maven打包后项目名称不对
    python之正则表达式
  • 原文地址:https://www.cnblogs.com/liho/p/14470251.html
Copyright © 2011-2022 走看看