• Python+selenium 【第五章】UI自动化元素等待


      

    元素等待操作

    为了保证脚本的稳定性,有时候需要引入等待时间,等待页面加载元素后再进行操作,selenium提供三种等待时间设置方式。

    sleep

    sleep():固定休眠时间设置,python的time包里提供了休眠方法sleep,导入包后就能使用;

    sleep()方法以秒为单位,如果超时设置小于1秒,可以使用小数importtimetime.sleep(0.5)

    implicitlyWait

    implicitlyWait()方法比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待,称为隐式等待

    driver.implicitly_wait(100)

    element=driver.find_element_by_css_selector(“div.red_box”)

    备注:设置等待时间100s,页面上的元素5s后出现,只等待5s。不会等待100秒

    WebDriverWait

    显示等待,语法格式如下:

    WebDriverWait(driver,timeout,poll_frequency=0.5,ignore_exceptions=None)

    driver:WebDriver的驱动程序(IE,火狐,谷歌或远程)

    timeout:最长超时时间,默认以秒为单位

    poll_frequency:休眠时间的间隔(步长)时间,默认为0.5秒(即每500毫秒扫描一次页面)

    ignore_exceptions:超时后的异常信息,默认情况下抛 NoSuchElementException异常

    扩展知识:高亮元素

    def highLightElement(driver, element):
      # 封装好的高亮显示页面元素的方法
      # 使用JavaScript代码将传入的页面元素对象的背景颜色和边框颜色分别
      # 设置为绿色和红色
      driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",
      element, "background:green ;border:2px solid red;")

    示例代码

    # -*- coding: utf-8 -*-
    # @Time : 2021/12/22 17:41
    # @Author : Limusen
    # @File : demo_ui_wait

    import os
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    STYLE = "background: blue; border: 2px solid red;" # 高亮的样式


    def highLightElement(driver, element):
    # 封装好的高亮显示页面元素的方法
    # 使用JavaScript代码将传入的页面元素对象的背景颜色和边框颜色分别
    # 设置为绿色和红色
    driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",
    element, "background:green ;border:2px solid red;")


    # 1.扩展知识:元素高亮
    driver = webdriver.Chrome()
    driver.get(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','file','Wait.html'))# 在代码文件中

    # https://gitee.com/todayisgoodday/PythonSelenium

    # 2.不加任何等待,直接报错

    # driver.find_element(By.ID,'b').click()
    # el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
    # highLightElement(driver, el)

    # 3.sleep():固定休眠时间设置 固定等待7s

    # driver.find_element(By.ID,'b').click()
    # time.sleep(7)
    # el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
    # highLightElement(driver, el)

    # 4.implicitlyWait():隐式等待, 加隐式等待10秒

    # driver.implicitly_wait(10) # 只需要设置一次,整个代码都生效
    # driver.find_element(By.ID, 'b').click()
    # el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
    # highLightElement(driver, el)

    # 5.WebDriverWait():显示等待,加显示10s
    driver.find_element(By.ID, 'b').click()
    element = WebDriverWait(driver, 5).until(lambda x: x.find_element_by_css_selector('div.red_box'))

    highLightElement(driver, element)

    time.sleep(2)

    driver.quit()

    总结

    本章节主要讲述了等待的具体用法,下一章节我们将学习层级定位/父子级元素定位/切换iframe框架等操作

    代码地址

    https://gitee.com/todayisgoodday/PythonSelenium

    CSDN地址

    https://blog.csdn.net/weixin_42382016/category_11566096.html

  • 相关阅读:
    青龙峡蹦极
    DNN Web Platform 官方汉化版本 5.5
    “\images” 和 “~\images'”的区别
    我们家的小公主
    asp实用类库DataList
    计算上月、下月、上周、下周..日期范围
    网页按钮大本营
    用XP做服务器突破10人限制
    变动翻屏展示图片效果
    写给所有的IT民工们
  • 原文地址:https://www.cnblogs.com/yushengaqingzhijiao/p/15720548.html
Copyright © 2020-2023  润新知