python中3种等待元素出现的方法总结

 更新时间:2022年03月22日 09:09:17   作者:n_laomomo  
发现太多人不会用等待了,小编今天实在是忍不住要给大家讲讲等待的必要性,下面这篇文章主要给大家介绍了关于python中3种等待元素出现的方法,需要的朋友可以参考下

前言

在做web或app的自动化测试经过会出现找不到元素而报错的情况,很多时候是因为元素

还没有被加载出来,查找的代码就已经被执行了,自然就找不到元素了。那么我可以用等待

元素加载完成后再执行查找元素的code。

Python里有三种等待的方式:

一、强制等待

Sleep(54)

这个方法在time模块,使用时通过from time import sleep导入

比如:

Sleep(10) #表示强行等待10s再执行下一句代码

Driver.find_element_by_xpath(“xxxxxx”)

这种等待方式时间到了就执行下个语句,但比较死板,不能保证在等待的时间内元素真正被加载了出来。

二、隐性等待

Implicitly_wait(xxx)

这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。

Driver=webdriver.Chrome()
Driver.implicitly_wait(10)#等待10s
Driver.get(“XXX”)

这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。

看看第三种方法,比较灵活

三、显性等待

WebDriverWait,配合该类的until()和until_not()方法,表示程序每隔x秒去判断一下指

定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,指定时间截

止。如果超时就会抛出异常。

from selenium import webdriver 
from selenium.webdriver.support.wait importWebDriverWait 
from selenium.webdriver.support importexpected_conditions as EC 
from selenium.webdriver.common.by import By

locator=(By.XPATH,”xxxxxxx”)
d = webdriver.Chorme()
d.get(“http://www.sina.com”)
WebDriverWait(d,10,1).unitl(EC.presence_of_element_located(locator))
Print(“XXX”)

这里表示等待10s,每隔1s去检查一次元素是否出现,出现了就执行下一步,直到10s

结束后还没有出现就会抛出异常。

附:python selenium2 中的显示等待WebDriverWait与条件判断expected_conditions实例讲解

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

base_url = "http://www.baidu.com"
driver = webdriver.Firefox()
driver.implicitly_wait(5)
'''隐式等待和显示等待都存在时,超时时间取二者中较大的'''
locator = (By.ID,'kw')
driver.get(base_url)

WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))
'''判断title,返回布尔值'''

WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
'''判断title,返回布尔值'''

WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
'''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''

WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))
'''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''

WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))
'''判断元素是否可见,如果可见就返回这个元素'''

WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))
'''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''

WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav')))
'''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''

WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))
'''判断指定的元素中是否包含了预期的字符串,返回布尔值'''

WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))
'''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''

#WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator))
'''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''
#注意这里并没有一个frame可以切换进去

WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))
'''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''
#注意#swfEveryCookieWrap在此页面中是一个隐藏的元素

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()
'''判断某个元素中是否可见并且是enable的,代表可点击'''
driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()
#WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()

#WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'su')))
'''等待某个元素从dom树中移除'''
#这里没有找到合适的例子

WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]")))
'''判断某个元素是否被选中了,一般用在下拉列表'''

WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]"),True))
'''判断某个元素的选中状态是否符合预期'''

WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"//*[@id='nr']/option[1]"),True))
'''判断某个元素的选中状态是否符合预期'''
driver.find_element_by_xpath(".//*[@id='gxszButton']/a[1]").click()

instance = WebDriverWait(driver,10).until(EC.alert_is_present())
'''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''
print instance.text
instance.accept()

driver.close()

总结

到此这篇关于python中3种等待元素出现的文章就介绍到这了,更多相关python等待元素出现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对Python实现简单的API接口实例讲解

    对Python实现简单的API接口实例讲解

    今天小编就为大家分享一篇对Python实现简单的API接口实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python2.7使用scapy发送syn实例

    python2.7使用scapy发送syn实例

    这篇文章主要介绍了python2.7使用scapy发送syn实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python基于http下载视频或音频

    python基于http下载视频或音频

    这篇文章主要为大家详细介绍了python基于http下载视频或音频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python爬取bilibili网页排名,视频,播放量,点赞量,链接等内容并存储csv文件中

    python爬取bilibili网页排名,视频,播放量,点赞量,链接等内容并存储csv文件中

    这篇文章主要介绍了python爬取bilibili网页排名,视频,播放量,点赞量,链接等内容并存储csv文件中,首先要了解html标签,标签有主有次,大致了解以一下,主标签是根标签,也是所有要爬取的标签的结合体,需要的朋友可以参考一下
    2022-01-01
  • Python数据分析之堆叠数组函数示例总结

    Python数据分析之堆叠数组函数示例总结

    这篇文章主要为大家介绍了Python数据分析之堆叠数组函数示例总结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • python调用fortran模块

    python调用fortran模块

    本文给大家介绍的是在Python中调用fortran代码,主要是用到了f2py这个程序,十分的实用,有需要的小伙伴可以参考下
    2016-04-04
  • pandas库中 DataFrame的用法小结

    pandas库中 DataFrame的用法小结

    这篇文章主要介绍了pandas库中 DataFrame的用法,利用pandas.DataFrame可以构建表格,通过列标属性调用列对象,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • LRUCache的实现原理及利用python实现的方法

    LRUCache的实现原理及利用python实现的方法

    LruCache 是 Android 的一个内部类,提供了基于内存实现的缓存,而下面这篇文章主要给大家介绍了关于LRUCache的实现原理以及利用python实现的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-11-11
  • 一百多行python代码实现抢票助手

    一百多行python代码实现抢票助手

    一百多行python代码轻松实现抢票助手,十一出行不再愁!本文具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • python正则表达式抓取成语网站

    python正则表达式抓取成语网站

    做NLPproject时需要一个成语库,我需要的是纯成语,网上找的都是有详细解释的。于是自己写了一个爬成语的python程序
    2013-11-11

最新评论