zoukankan      html  css  js  c++  java
  • python--元素等待

    元素等待

    为什么要进行元素等待?

    1. 网络慢的时候,元素还未加载出来,这时候继续往下进行程序,就会报错
    2. 有些元素只有执行某种交互的时候才会加载出来(例如一些分页加载/懒加载)

    元素等待的几种方式

    1. 强制等待:time.sleep()
    2. 智能等待:隐式等待/显示等待

    为什么要进行智能等待?

    1. 强制等待不灵活,如果等待时间不足,程序就会报错;如果等待时间过长,自动化程序效率低
    2. 智能等待是任何时候元素加载完成,接结束等待,不会浪费时间,可以很快进行下一步操作

    隐式等待 implicitly_wait(self, time_to_wait)

    用法:

    1. time_to_wait:就是设置隐式等待的时间
    2. 设置隐式等待 driver.implicitly_wait(30), 最大等待时间是30s,如果加载超过30s 元素还是没有加载出来,程序就会报错;所以设置隐式等待超时时间,可以稍微设置长一点,一般30-40s就可以.如果元素在2s的时候就加载出来了,那程序就不会继续等待30s,比强制等待更加灵活。
    3. 隐式等待只需要设置一次,在初始化浏览器后进行设置;之后每一个元素查找都有30s的等待时间。
    4. 隐式等待的不足——隐式等待只能用于元素查找,等待元素出现;有些不是元素查找的操作,就不适用!(例如等待一个弹窗/页面出现,这时候就不能用隐式等待)

    显示等待--重点!

    定时器+条件——>等待某个条件被满足(例如等待某个元素可以被点击/某个页面可见等)

    1. 常用的一些触发条件
      condition_1 = EC.presence_of_element_located(locator=) #查找元素被加载出来,用的最多
      condition_2 = EC.visibility_of_element_located(locator=) #查找元素可视,用的第二多
      condition_3 = EC.element_to_be_clickable(locator=) #查找元素可以被点击,第三
    2. 定位器locator()
      2.1 locator是放在条件里的参数,一定是元组类型;
      2.2 loader()里面有两个参数,第一个是元素查找的方式,例如id/xpath,第二个元素是要元素值,例如:loader = ("xpath", "//input[@id='kw']")
    3. 显示等待的4个步骤
      3.1 初始化一个定时器wait()
      3.2 初始化一个定位器locator()
      3.3 设置一个条件condition,触发定时器的条件,把locator()添加到条件中,condition(locator);
      3.4 把条件添加到定时器中,wait.until(condition(locator()));
      全部写一起就是:wait = WebDriverWait(driver, 30, 0.2).until(EC.presence_of_element_located(("xpath", "//input[@id='kw']")))
    4. locator()参数的两种写法
      4.1 直接用字符串:locator("xpath", '//input[@id="kw"]')
      4.2 用By表达式:locator(By.XPATH, '//input[@id="kw"]')
    注意事项
    1. 条件使用:首选visible/presence/clickable
    2. loader()--一定是一个元组类型的数据!

    提供一个偷懒等待方法:

    厚积而薄发,越努力越幸运!
  • 相关阅读:
    (转)Java并发包:AtomicBoolean和AtomicReference
    (转)maven怎么 引入(或引用/使用) 自定义(或本地/第三方) jar的三种方式 图文教程 方法二最简单
    servlet3.0 异步处理
    (转)Groovy简介
    (转)springboot应用启动原理(一) 将启动脚本嵌入jar
    (转)springboot应用启动原理(二) 扩展URLClassLoader实现嵌套jar加载
    (转)运行jar应用程序引用其他jar包的四种方法 -- ClassLoader应用
    (转)二层网络结构和三层网络结构的对比
    Java语法糖4:内部类
    Java语法糖3:泛型
  • 原文地址:https://www.cnblogs.com/qhy-petrel/p/12208781.html
Copyright © 2011-2022 走看看