zoukankan      html  css  js  c++  java
  • selenium 设置等待时间

    有些网站打开地址或者进行操作后,页面需要加载几秒钟,或者等待某一元素加载完成后再继续下一步操作,这里就需要进行设置等待时间

    导入time模块,time模块是python自带的,无需下载


    一、设置等待时间有三种方法:

    1、强制等待

    time.sleep(time)     # 强制等待3秒后,进行下一步操作,也可以是小数,单位为秒 

     

    缺点:不能准确把握需要等待的时间(有时候操作未完成,等待就结束了,导致报错;有时候操作已经完成了,但时间还没到,浪费时间),如果再用例中大量使用,会浪费不必要的等待时间,影响用例的执行效率。

    优点:使用简单,可以在调试时使用。

    2、隐式等待 

    driver.implicitly_wait(X),在X时间内,页面加载完成,进行下一步操作。

    缺点:使用隐式等待,程序会一直等待页面加载完成,才会执行下一步操作

    (有时候页面想要的元素早已加载完成了,但是页面上个别元素还没有加载完成,仍要等待页面全部完成才能执行下一步,使用 也不是很灵活)

    优点:隐式等待对整个driver的周期都起作用,所以只要设置一次即可

    3、显示等待 

    from selenium.webdriver.support.wait import WebDriverWait 

     WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)

    优点:使用相对比较复杂

    缺点:等地啊判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率

     示例:打开登录页面,以登录按钮为页面加载成功的标志,如果20秒内,定位到登录按钮,就进行登录操作,不再继续等待,如果20秒内还没定位到登录按钮,下一步操作就会报错,并抛出异常。 

    from selenium import webdriver

    import time 

    from selenium.webdriver.support.wait import WebDriverWait 

    from selenium.webdriver.support import expect_conditions as EC

      from selenium.webdriver.common.by import By

    driver = webdriver.Chrome()

    driver.get("http://www.baidu.com/) 

    # 加载等等,等待加载页面,根据目标页面特征元素进行判断

     locatorLogin = (By.TAG_NAME,"button")

    try:

    WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locatorLogin)) 

    print("登录页面加载出来啦") 

    except:

    print("页面加载失败") 

    # 页面加载完成后,进行用例的相应操作

    ownerSite = driver.find_element_by_id("ownerSite")

    ownerSite.clear()

    ownerSite.click()

    ownerSite.send_keys(u"今天星期几") 

      ......

    ......

    二、WebDriverWait类

    1、until() 

    until()方法:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常。 

    2、until_not()

    until_not()方法:直到条件不成立返回为真,是当某元素消失或什么条件不成立则继续执行,等待结束。如果超时,抛出TimeoutException,将message传入异常。 

    3、excepted_conditions异常处理模块

    expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件方法。 

     三、WebDriverWait自带的方法

    is_displayed():判断元素是否被展示出来

    is_enable():判断元素是否可操作

    is_select():判断元素是否被选择 

  • 相关阅读:
    跨域(cross-domain)访问 cookie (读取和设置)
    实用的PHP正则表达式
    Leetcode:find_minimum_in_rotated_sorted_array
    spring Jdbc自己主动获取主键。
    《学习opencv》笔记——矩阵和图像操作——cvSetIdentity,cvSolve,cvSplit,cvSub,cvSubS and cvSubRS
    HTML5 input placeholder 颜色 改动
    Java面试宝典2014版
    Go语言 关于go error处理风格的一些讨论和个人观点(上)
    动静结合学内核:linux idle进程和init进程浅析
    【Bootstrap3.0建站笔记二】button可下拉弹出层
  • 原文地址:https://www.cnblogs.com/DeryKong/p/10657508.html
Copyright © 2011-2022 走看看