zoukankan      html  css  js  c++  java
  • seienium基础(测试脚本中的等待方法)

    测试脚本中的等待方法

    一、加等待时间的目的

    • 等待是为了使脚本执行更加稳定

    二、常用的休眠方式

    第一种  sleep():

    设置固定休眠时间。python 的 time 包提供了休眠方法 sleep() ,导入 time包后就可以使用 sleep()进行脚本的执行过程进行休眠。

    python

    #导入 time 包
    import time
    time.sleep()

    java

    Thread.sleep(6000)  //强制等待6s

    第二种  implicitly_wait():隐式等待-达到全局等待的效果

    它是 webdirver 提供的一个超时等待。隐式等待一个元素被发现,或一个命令完成。如果超出了设置时间仍未定位到元素则抛出异常。
    #当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
    #换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0
    #一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,
    #它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。

    #implicitly_wait()方法比 sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

    python

    self.driver.implicitly_wait(10)  #全局等待10s

    java

    driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);

    第三种  WebDriverWait():

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

    WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
    • driver : WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)
    • timeout :最长超时时间,默认以秒为单位
    • poll_frequency :休眠时间的间隔(步长)时间,默认为 0.5 秒
    • ignored_exceptions :超时后的异常信息,默认情况下抛 NoSuchElementException 异常。

    WebDriverWai()一般和 until()或 until_not()方法配合使用,下面是 until()和 until_not()方法的说明。

    • until(method, message=’’):调用该方法提供的驱动程序作为一个参数,直到返回值不为 False。
    • until_not(method, message=’’):调用该方法提供的驱动程序作为一个参数,直到返回值为 False。

    python

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    
    driver=webdriver.Firefox()
    #进入百度首页-搜索麦子学院
    driver.get('https://www.baidu.com')
    d=WebDriverWait(driver,2).until(lambda a:a.find_element_by_id('kw'))#在两秒之间内找到元素
    d.send_keys('麦子学院')#操作找到的元素
    driver.find_element_by_id('su').click()
    
    driver.quit()
    from selenium.webdriver.support.ui import WebDriverWait
    element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“someId”))
    is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id(“someId”).is_displayed())

    java

    复制代码
    WebDriverWait wait = new WebDriverWait(driver, 60);
    WebElement e = wait.until(new ExpectedCondition<WebElement>(){ 
    @Override 
    public WebElement apply(WebDriver d) { 
    return 
    d.findElement(By.xpath("//android.widget.RelativeLayout[@index='2']")); 
    }});
    e.click();
    //WebDriverWait类的构造方法接受了一个WebDriver对象和一个等待最长时间(60秒)。然后调用until方法,其中重写ExpectedCondition接口中的apply方法,
    让其返回一个WebElement,即加载完成的元素,然后点击。默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到有成功的返回,当然如果超过设定的值
    还没有成功的返回,将抛出异常
  • 相关阅读:
    前端 二
    web 作业 01
    前端 一
    mysql 了解性知识
    数据查询优化之mysql索引
    yml格式或者叫做YAML格式数据学习
    执行sql报错:Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
    大型网站架构之分布式消息队列(转)
    intellj利用 maven自动生成dto,mapper文件
    对memcached使用的总结和使用场景(转)
  • 原文地址:https://www.cnblogs.com/jingdenghuakai/p/11700144.html
Copyright © 2011-2022 走看看