• selenium—隐式等待和显式等待


    一、隐式等待和显式等待的区别

    隐式等待:是整个页面的等待。设置一个最长的等待时间,在规定时间内整个页面加载完成,则执行下一步,否则继续等待直到最长等待时间结束。

    显式等待:是针对某个元素的等待。在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则执行下一步,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。

    一般常用显式等待

    二、隐式等待

    driver.implicitly_wait(时间)

    # coding=UTF-8
    #21.隐式等待
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    from selenium import webdriver
    import unittest
    import time
    from selenium.common.exceptions import NoSuchElementException, TimeoutException
    
    class Case21(unittest.TestCase):
    
        def setUp(self):
            self.driver = webdriver.Chrome()
    
        def test_implicitlyWait(self):
            url = "https://www.sogou.com"
            self.driver.get(url)
            self.driver.implicitly_wait(5)
            try:
                element = self.driver.find_element_by_id("query")
                element.click()
            except (NoSuchElementException,TimeoutException), e:
                traceback.print_exc()   #捕获并打印异常
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == '__main__':
        unittest.main()

    三、显示等待

    WebDriverWait 类,与until() 和until_not() 结合

    WebDriverWait(self, driver, timeout, poll_frequency = 0.5, ignored_exceptions = None)

    driver:WebDriver实例对象(chrom,IE等)

    timeout:最长的显示等待时间,单位秒

    poll_frequency:调用频率,在timeout时间内,每隔poll_frequency时间执行一次判断条件,默认0.5秒

    ignored_exceptions:执行过程中忽略的异常类型,默认只忽略NoSuchElementException

    WebDriverWait 类提供的方法:

    ① until(method,message=“”)

    ②until_not(method,message=“”)

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    WebDriverWait(self.driver, 10, 0.2).until(EC.element_to_be_clickable((By.ID, 'check')))
    最长显示等待10秒,调用频率0.2秒,等待期望check按钮可以被点击
  • 相关阅读:
    【社工】社会工程学框架
    改用MyAnalyzer的KMeans聚类算法
    Ubuntu系统经常使用操作指令说明
    phonegap(cordova) 自己定义插件代码篇(三)----支付宝支付工具整合
    虚幻4 碰撞过滤
    java怎样将一个List传入Oracle存储过程
    Android 基于Retrofit+Rxjava搭建的简单易用的网络架构
    WIN SERVER8更改MYSQL的datadir后,数据库启动不起来
    Chord算法实现具体
    内存溢出与内存泄漏
  • 原文地址:https://www.cnblogs.com/erchun/p/11814318.html
Copyright © 2020-2023  润新知