• selenium 3种等待方式


    三种等待方式

    ①强制等待
    强制等待是使线程休眠一定时间。强制等待一般在隐式等待和显式等待都不起作用时使用。示例代码如下:

    time.sleep(3)
    
    • 1

    ②隐式等待
    隐式等待的作用是全局的,是作用于整个 session 的生命周期,也就是说只要设置一次隐式等待,后面就不需要设置。如果再次设置隐式等待,那么后一次的会覆盖前一次的效果。

    当在 DOM 结构中查找元素,且元素处于不能立即交互的状态时,将会触发隐式等待。

    driver.implicitly_wait(30)
    
    • 1

    ③显式等待
    显式等待是在代码中定义等待条件,触发该条件后再执行后续代码,就能够根据判断条件进行等待。程序每隔一段时间进行条件判断,如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间。核心用法如下:

    # 导入显示等待
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions
    ...
    # 设置10秒的最大等待时间,等待 (By.TAG_NAME, "title") 这个元素点击
    WebDriverWait(driver, 10).until(
        expected_conditions.element_to_be_clickable((By.TAG_NAME, "title"))
    )
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    一个案例

    #导入依赖
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions
    from selenium.webdriver.support.wait import WebDriverWait
    
    class TestHogwarts():
    def setup(self):
            self.driver = webdriver.Chrome()
            self.driver.get('https://ceshiren.com/')
    #加入隐式等待
            self.driver.implicitly_wait(5)
    
    def teardown(self):
    #强制等待
            time.sleep(10)
            self.driver.quit()
    
    def test_hogwarts(self):
    #元素定位,这里的category_name是一个元组。
            category_name = (By.LINK_TEXT, "开源项目")
    # 加入显式等待
            WebDriverWait(self.driver, 10).until(
                expected_conditions.element_to_be_clickable(category_name))
    # 点击开源项目
            self.driver.find_element(*category_name).click()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    关于Git这一篇就够了
    Laravel视图:构建动态用户界面的基石
    linux常用命令及解释大全(三)
    Spring MVC源码详解
    [SpringMVC]REST入门案例与优化
    如何用python写 翻译腔?天哪~这实在是太有趣了~
    windows安装nginx并设置开机自启动
    RocketMQ源码分析:延迟消息
    安全防御(第六次作业)
    .Net Core 企业微信更新模版卡片消息
  • 原文地址:https://blog.csdn.net/weixin_39843945/article/details/133988334