• 不得不说的三大等待操作


    之前有总结到说定位元素的方法,我习惯是用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秒

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

  • 相关阅读:
    Android SQLite 简单使用演示样例
    经常使用排序算法实现[交换排序之冒泡排序、高速排序]
    Spring In Action读书笔记
    Linux 经常使用快捷键
    Android组件系列----ContentProvider内容提供者【1】
    Android Stuido 好卡怎么办?不要急,兄弟来教你
    【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记3 Xcode、Auto Layout及MVC
    JAVA学习第四十五课 — 其它对象API(一)System、Runtime、Math类
    hdu 5073 Galaxy
    从设计稿到demo
  • 原文地址:https://www.cnblogs.com/LCboss/p/11917876.html
Copyright © 2020-2023  润新知