zoukankan      html  css  js  c++  java
  • 不得不说的三大等待操作

    之前有总结到说定位元素的方法,我习惯是用xpath的,上篇文章已经提到过怎么用xpath来定位,在我们做UI自动化,定位到了元素,但是在页面中元素不一定被渲染出来了,这个时候我们运行脚本肯定会给你报错的,那么我们怎么解决这种问题呢?

    selenium中有三大定位方式可以解决这种问题:

    • 强制等待
    • 隐性等待
    • 显性等待

    这三种方式都是可以解决这种问题的,简单说下这三种方式的用法以及适用场景吧

    1、强制等待

      强制等待我们一般在做UI自动化用的也多,但是对于这个时间一般是很少的,强制等待的意思是运行到了这行代码后,你就必须要停止多少秒之后才能运行,这种确实是比较强制吧,哈哈哈。。。

    import time
    
    
    time.sleep(5) # 强制等待5秒

    用法就是上面这种,time.sleep(5)就是强制等待5秒,也就是5秒之后你才能去运行下一行代码

    2、隐性等待

      隐性等待的意思是等待的时间不会暴露出来,也就是悄悄的等,不会让你发现,等页面加载好了之后就会进行下一步操作,如果设定的时间还没有等到页面加载完,那么就会抛出异常,也就是最多会等待你设定的时间,超出这个时间后就会报错

    from selenium import webdriver
    
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)   # 隐性等待10秒钟

    3、显性等待

      显性等待的意思就是在我们的代码中可以设置一个元素,设定时间,和循环周期,比如下面的代码:

    使用显性等待的话我们需要导入下面几个包,expected_conditions这个里面有很多的检查方式,我这里只是列举了一个检查到元素存在的方式(具体可以看看源码哈,方式很多,根据具体的方式选择),在WebDriverWait这个类里面我们需要传递三个参数(会话、总共等待的时间,循环时间)

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    
    driver = webdriver.Chrome()
    driver.get("https://ke.qq.com/")  # 打开腾讯课堂
    first_login = (By.XPATH, '//a[@class="mod-header__link-login js-login-op"]')   # 腾讯课堂首页登录按钮
    WebDriverWait(driver, 10, 0.5).until(EC.presence_of_element_located(first_login))   # 显性等待到登录按钮加载出来,没隔0.5检查一共10秒

    在以上这三种等待方式中我们一般常用的是显性等待,当然这三种方式都是可以共同用的。

  • 相关阅读:
    11->centos6 安装oracle
    centos7安装rlwrap
    ajax
    java获取时间戳
    idea主要设置大纲图
    ppycharm设置解释器版本号码
    JTA 深度历险
    学会数据库读写分离、分表分库——用Mycat,这一篇就够了!
    分库分表的几种常见玩法及如何解决跨库查询等问题
    深入浅出SOA
  • 原文地址:https://www.cnblogs.com/LCboss/p/11917876.html
Copyright © 2011-2022 走看看