python--元素等待

Posted qhy-petrel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()--一定是一个元组类型的数据!

提供一个偷懒等待方法:
技术图片

以上是关于python--元素等待的主要内容,如果未能解决你的问题,请参考以下文章

Python +selenium之设置元素等待

python+Appium自动化:元素等待时间

Python+Selenium笔记:元素等待机制

python+selenium2自动化---设置元素等待

python如何实现元素等待

python selenium中等待元素出现及等待元素消失操作