zoukankan      html  css  js  c++  java
  • selenium 常见元素操作:三大等待---强制等待、隐性等待、显性等待

    selenium 常见元素操作

    • 三大等待
    • 三大切换(iframe,window,alert)
    • 下拉列表
    • 鼠标和键盘
    • js+ dom应用()
    • 上传操作

    1、强制等待:time.sleep()

      必须等待固定时间后才可以往下运行

    from selenium import webdriver
    import time         # 强制等待需要导入time(译:泰姆),使用其中的 sleep(译:私立破) 方法
    
    # 强制等待  sleep(译:私立破)
    # 打开谷歌浏览器,建立会话。启动Chromedriver.exe  打开Chrome
    driver = webdriver.Chrome()
    
    # 访问百度首页
    driver.get("http://www.baidu.com")
    # 点击登录按钮
    driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
    
    # # 强制等待5秒,在进行下一步操作
    time.sleep(10)
    # 点击 用户名登录 按钮
    driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
    # 强制等待5秒后关闭浏览器
    time.sleep(10)
    driver.quit()

    2、智能等待分为:隐性等待、显性等待

    隐形等待:implicitly_wait(20)  (译:隐婆思类.威特)

      全局设置一次(与显性等待不同)

      隐形等待元素不一定是可见的(与显性等待不同)

      智能等待的隐形等待:会话开始之后使用隐形等待,之后所有的找元素都会调用隐形等待,等待元素可见,等待命令执行

    from selenium import webdriver
    
    # 打开谷歌浏览器,建立会话。启动Chromedriver.exe  打开Chrome
    driver = webdriver.Chrome()
    
    # 智能等待的隐形等待:会话开始之后使用隐形等待,之后所有的找元素都会调用隐形等待,等待元素可见,等待命令执行
    # implicitly_wait(译:隐婆思类.威特)
    driver.implicitly_wait(20)
    
    # 访问百度首页
    driver.get("http://www.baidu.com")
    # 点击登录按钮
    driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
    # 点击 用户名登录 按钮
    driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
    # 关闭浏览器
    driver.quit()

    显性等待:他有非常多的条件

    与隐形等待的不同,隐形等待处理不了下面几种情况;可以处理很多中情况如:

    • 等待元素可见
    • 等待元素可用
    • 等待新窗口出现
    • 等待 url地址=xxx的时候
    • 等待 的上限是多少秒,每隔0.5秒去查看条件是否成立
    • 明确等到某个条件满足之后,再去执行下一步操作。
    • 程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到等待的元素可见
    • 超过设置的最长时间,然后抛出TimeoutException. --- .
    • WebDriverWait类:显性等待类。
      • WebDriverWait(driver,等待时长,轮循周期).until(这个条件成立,才向下执行)/until_ not()  
    • expected_ conditions as EC 模块: 提供了一系列期望发生的条件。

    常用的等待判断

    • presence_ _of_ element_ located:元素 存在
    • vibility _of_ element_ located: 元素可见
    • element _to_ be_ clickable: 元素可点击
    • ps:这个类有很多判断方法。具体自行了解。

    什么时候用?

    • 当你的操作,引起了页面的变化,而你接下来要操作变化 的元素的时候,就一定要加等待。

    使用之前,引入相关的库

    • from selenium.webdriver.support.wait import WebDriverWait
    • from selenium.webdriver.support import expected_conditions as EC   (译:伊克斯盘课题的。肯迪深思)
    • from selenium.webdriver.common.by import By

    使用方法:

    1、先确定元素的定位表达式
    web_ locator = 'XXXX'

    2、调用webdriverWait类设置等待总时长、轮询周期。并调用期until、until_ not方法。
    WebDriverWait(webdriver对象名,等待总时长,轮询周期),until(判断条件)

    3、使用expected_ conditions对 应的方法来生成判断条件。
    EC.类名((定位方式、定位表达式))
    例: EC.presence_ of_ element_ located((By.CSS_ SELECTOR,web locator)))

    例:等待百度登陆的弹出框出现,再去操作弹出框。

    # 使用之前,引入相关的库
    from selenium.webdriver.support.wait import WebDriverWait               # 等待条件
    from selenium.webdriver.support import expected_conditions as EC        # 等待元素可见的条件
    from selenium.webdriver.common.by import By                             # 定位类型八种定位方式
    from selenium import webdriver
    
    
    # 打开谷歌浏览器,建立会话。启动Chromedriver.exe  打开Chrome
    driver = webdriver.Chrome()
    
    # 访问百度首页
    driver.get("http://www.baidu.com")
    # 点击登录按钮
    driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
    
    # 等待元素 id=TANGRAM__PSP_10__footerULoginBtn 可见。等待上限是10秒。直到 条件可见
    loc = (By.ID, "TANGRAM__PSP_10__footerULoginBtn")
    # EC.visibility_of_element_located(loc)  # 等待元素可见的条件
    # until (译:昂题尔)直到什么什么条件成立
    WebDriverWait(driver, 10, 0.5).until(EC.visibility_of_element_located(loc))
    
    # 点击 用户名登录 按钮
    driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
    # 关闭浏览器
    driver.quit()

    *******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!******* 

  • 相关阅读:
    [转载]每天要说无数次的话,原来英语这么说
    [转载]What I Have Lived For 一生何求?
    WIN 7 和fedora双系统引导问题
    [转载]网站建设中一些容易被忽视的问题
    linux进程控制-wait()
    shell(2)
    电脑英语缩略词
    shell(1)
    [转载]无论成败 但求做最好的自己
    [转载]C++出错提示英汉对照表
  • 原文地址:https://www.cnblogs.com/shouhu/p/12194347.html
Copyright © 2011-2022 走看看