zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
    UVA 10564 Paths through the Hourglass(背包)
    Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
    UVALive 3530 Martian Mining(贪心,dp)
    UVALive 4727 Jump(约瑟夫环,递推)
    UVALive 4731 Cellular Network(贪心,dp)
    UVA Mega Man's Mission(状压dp)
    Aizu 2456 Usoperanto (贪心)
    UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
    Aizu 2304 Reverse Roads(无向流)
  • 原文地址:https://www.cnblogs.com/shanliguniang/p/10837048.html
Copyright © 2011-2022 走看看