• selenium+pthon----定位元素时的三种时间等待方法


    在元素定位的过程中我们少不了要加入等待时间,

    如time.sleep(n)   ----强制等待

    这但是这种方法并不是时时都凑效的,有时候加入了等待的时间但也没有能定位到我们想要的元素(时间太短没有加载出来也定位不到,时间太长很影响执行效率)。而且这种等待时间是定死的,不管有没有加载出来都要等待那么久的时间,很影响用例执行的效率,那么还有没有其它更有效的等待方法。

    如implicitly_wait()--隐性等待,设置一个时间,在一定时间内网页是否加载完成 ,如果加载完成则进行下一步,如果没有加载完成则会报加载超时。

    这种方法是一种隐式的等待方法,在一定程度上节省了很多时间,但是也是有弊端的,如在一些js页面上无法加载出来时(但其实我们要的元素已经加载完成了),这个时候会是一直是等待的。

    再看另一种更有效的等待方法:

    WebDriverWait---显性等待

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    driver = webdriver.Firefox()
    driver.get('https://huilansame.github.io')
    WebDriverWait(driver,20,0.5).until(
    EC.presence_of_element_located((By.LINK_TEXT,'CSDN'))) #每隔0.5秒就去查询一次元素是否出现,如果出现就停止等待,如果没有出现就继续等待,如果等待时间超过了20秒,则报超时异常。
    print(driver.find_element_by_link_text('CSDN').get_attribute('href'))
    driver.close()

    DriverWait有两种方法:
    until() ----等待元素出现
    until_not() ----等待元素消失

    用法:
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait

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

    # 等待元素出现:until()
    # 等待时长10秒,默认每0.5秒询问一次
    WebDriverWait(driver,10,0.5).until(lambda x: x.find_element_by_id("kw")).send_keys("boke")


    # 等待元素消失:until_not()
    is_disappeared = WebDriverWait(driver,10,1).
    until_not(lambda x: x.find_element_by_id("kw666").is_displayed()) #判断一个不存在的元素,如果是判断一个存在的元素会报异常
    print(is_disappeared)
  • 相关阅读:
    穷举字符串的一种算法
    使用VirtualBox SDK之初步编译
    Install Shield 中判断安装还是卸载
    [转] win32内核程序中进程的pid,handle,eprocess之间相互转换的方法
    如何做PHD (1)
    在TFS 2010中使用邮件提醒功能(Email Notification)
    Chrome的Awesome Screenshot的插件离线下载
    Visual Studio 2010下生成Crypto++ lib
    VirtualBox开发环境的搭建详解
    VC版PwdHash
  • 原文地址:https://www.cnblogs.com/shanliguniang/p/10837048.html
Copyright © 2020-2023  润新知