• Web自动化测试进阶:网页中难点之等待机制 —— 强制等待,隐式等待


     

    为什么要添加等待

    • 避免页面未渲染完成后操作,导致的报错

    经常会遇到报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[text()='个人中心']"}

    页面还在加载时,就在进行查收元素,此时元素还没显示加载出来,而报错哈哈

    直接等待

    • 缺点:使用比较死板,难以衡量具体等待时间。有的时候也解决不了等待问题,例如网页因某些原因加载过长
    • 解决方案:在报错的元素操作之前添加等待
    • 原理:强制等待,线程休眠一定时间
    • 演练环境:https://vip.ceshiren.com/
    • time.sleep(3)

    隐式等待

    • 注意:需要在代码一开始时就配置好;隐式等待只能解决元素查找问题,不可以解决元素交互问题
    • 问题:难以确定元素加载的具体等待时间。
    • 解决方案:针对于寻找元素的这个动作,使用隐式等待添加配置。
    • 演练环境:https://vip.ceshiren.com/
    • 原理:设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常
    1. #设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常
    2. driver.implicitly_wait(3)

    隐式等待无法解决的问题

    • 元素可以找到,使用点击等操作,出现报错
    • 原因:
      • 页面元素加载是异步加载过程,通常html会先加载完成,js、css其后
      • 元素存在与否是由HTML决定,元素的交互是由css或者js决定
      • 隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的交互
    • 解决方案:使用显式等待
    1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
    2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
    3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
    4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
    5. 可以免费学习!划重点!开源的!!!
    6. qq群号:110685036

    显式等待基本使用(初级)

    • 示例: WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)
    • 原理:在最长等待时间内,轮询,是否满足结束条件
    • 演练环境: https://vip.ceshiren.com/#/ui_study
    • 注意:在初级时期,先关注使用

    总结

    类型使用方式原理适用场景
    直接等待time.sleep(等待时间))强制线程等待调试代码,临时性添加
    隐式等待driver.implicitly_wait(等待时间)在时间范围内,轮询查找元素解决找不到元素问题,无法解决交互问题
    显式等待WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)设定特定的等待条件,轮询操作解决特定条件下的等待问题,比如点击等交互性行为
    1. def wait_until():
    2. driver = webdriver.Chrome()
    3. driver.get("https://vip.ceshiren.com/#/ui_study")
    4. WebDriverWait(driver, 10).until(
    5. expected_conditions.element_to_be_clickable(
    6. (By.CSS_SELECTOR, '#success_btn')))
    7. driver.find_element(By.CSS_SELECTOR, "#success_btn").click(

    今天的分享就到此结束了,大家还有什么不懂的可以评论区下提问哈,如果我的文章对你有所帮助的话,可以点赞三联支持一下哈 

  • 相关阅读:
    用 Redis 做一个可靠的延迟队列
    JavaScript高级程序设计 第4版 --表单脚本
    python 使用xlsx和pandas处理Excel表格
    BNext
    【设计模式专题】策略模式之多场景下的代码解耦“神器“
    滑动窗口延申题:最小覆盖子串
    老卫带你学---leetcode刷题(438. 找到字符串中所有字母异位词)
    【vue3】watch监听器
    设计模式-行为型模式-责任链模式
    pywinauto:Windows桌面应用自动化测试(三)
  • 原文地址:https://blog.csdn.net/m0_47485438/article/details/133798453