• selenium三大等待


    使用场景:有时候当我们操作页面元素时,需要等待这个过程才能操作成功。

    Ui自动化的时候,考虑到稳定性:多次运行同一脚本,都能够保证它是成功的。

    一、强制等待:sleep(秒)

    比如sleep(10),就必须等待10秒,才能执行下一步。

    简单粗暴,不过代码将会有很多sleep,冗余度会提高。

    在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

    软件测试视频教程观看处:

    2023完整版阿里大牛7天软件测试零基础速成内部教程,从基础到项目实战学完即入职。

    二、智能等待:显性等待

    专门针对特定元素而设置的等待,在规定的时间内找到元素,找到了就执行下一步, 没有找到抛出异常(TimeoutException)。效率高,可以自定义条件。

    from selenium.webdriver.support.wait import WebDriverWait

    WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until(条件)

    WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until_not(条件)

    selenium3当中,每一个条件是以类的形式实现的。每一个类都有__init__, __call__

    selenium4当中,每一个条件是以函数的形式实现的。每一个函数都有一个_predicate内部函数。闭包

    使用显性等待的时候,先确定你的条件是什么。然后再去使用显性等待。

    等待效果只有一次,不像隐性等待全局可用。

    比较多的用法:显性等待 + 短暂的sleep

    常用的条件:

    visibility_of_element_located(locator) --- locator对应的元素是可见的 element_to_be_clickable(mark) --- mark对应的元素可点击

    三、智能等待:隐形等待

    调用find_element/find_elements方法的时候,如果元素没找到不会立马报错, 会主动使用隐性等待,达到最大等待时间后,抛出异常。 一个会话(浏览器打开到关闭这个过程)当中,只需要调用一次,全局可用。 没有办法对精准度的元素进行定位,会影响实际的运行效率。 三种方法一起使用代码如下:

    1. 1 import time
    2. 2 from selenium import webdriver
    3. 3 from selenium.webdriver.support.wait import WebDriverWait
    4. 4 from selenium.webdriver.support import expected_conditions as EC
    5. 5
    6. 6 driver = webdriver.Chrome()
    7. 7 driver.get("https://www.baidu.com")
    8. 8 #隐形等待
    9. 9 driver.implicitly_wait(10)
    10. 10 driver.maximize_window()
    11. 11 # 显性等待
    12. 12 #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
    13. 13 el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
    14. 14 el.click()
    15. 15 # 强制等待
    16. 16 time.sleep(3)
    17. 17 driver.quit()

    显示等待结合预期条件判断代码如下:

    1. 1 import time
    2. 2 from selenium import webdriver
    3. 3 from selenium.webdriver.support.wait import WebDriverWait
    4. 4 from selenium.webdriver.support import expected_conditions as EC
    5. 5
    6. 6 # driver = webdriver.Chrome()
    7. 7 # driver.get("https://www.baidu.com")
    8. 8 # #隐形等待
    9. 9 # driver.implicitly_wait(10)
    10. 10 # driver.maximize_window()
    11. 11 # # 显性等待
    12. 12 # #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
    13. 13 # el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
    14. 14 # el.click()
    15. 15 # # 强制等待
    16. 16 # time.sleep(3)
    17. 17 # driver.quit()
    18. 18 #
    19. 19 driver = webdriver.Chrome()
    20. 20 driver.maximize_window()
    21. 21 driver.get("https://www.baidu.com")
    22. 22
    23. 23 locator = ('xpath','//a[text()="新闻"]')
    24. 24 # WebDriverWait()一般与 until()或 until_not()方法配合使用
    25. 25 # until(),直到返回值为 True
    26. 26 # until_not(),直到返回值为 Flase。
    27. 27 # 判断元素是否可见
    28. 28 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可见,如果超过设置时间仍检测不到,则抛出异常。
    29. 29 WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(locator),message="元素可见")
    30. 30 # 判断元素是否可以点击
    31. 31 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可点击,如果超过设置时间仍检测不到,则抛出异常。
    32. 32 WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable(locator))
    33. 33 # 判断元素是否存在
    34. 34 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。
    35. 35 WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(locator))
    36. 36 driver.find_element(*locator).click()
    37. 37 # 判断标题是否不存在
    38. 38 # 在设置时间内,默认每隔一段时间检测一次标题是否不存在,如果超过设置时间仍检测不到,则抛出异常。
    39. 39 WebDriverWait(driver,5,0.5).until_not(EC.title_is("123123"),message="标题不是这个")
    40. 40 time.sleep(3)
    41. 41 driver.quit()

    四、总结

    PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

    这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

     

  • 相关阅读:
    unity开发安卓视频文件适配手机和平板
    【Ubuntu】基于C++实现人脸识别
    错误:ERROR Cannot read properties of null (reading ‘type‘)
    dom4j读取xml内容时丢失换行符
    【Qt系列】QtableWidget表格列宽自适应表格大小
    R语言描述性统计:使用mean函数计算dataframe数据中指定数据列的均值
    如何设计vue项目的权限管理?
    揭露测试外包公司,关于外包,你或许听到过这样的声音
    无代码开发平台选型指南
    Excel中插入的图片在不同电脑上消失的问题及解决方法
  • 原文地址:https://blog.csdn.net/cs888zsy/article/details/134333490