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

    一、强制等待

    sleep() 不管元素有没有出现,一定要等。

    from selenium import webdriver

    import time # 强制等待需要导入time,使用其中的sleep方法

    二、隐形等待,适用条件:命令执行,元素查找(alert弹窗或者切换可能不生效)

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

    设置最长等待时间,在这个时间内加载完成,则可执行下一步,

    震哥哥driver的会话周期内,设置一次即可,全局可用(会话周期:打开浏览器到关闭浏览器。)

    等待时间超时还未出现元素,就会抛出异常timeout。

    from selenium import webdriver
    #启动谷歌浏览器,开启与浏览器之间的绘话,会话周期:打开浏览器到关闭浏览器。
    driver = webdriver.Chrome(service_log_path='E:柠檬班二chromedriver_service.log')
    #全局等待,隐性等待,如果不加等待,页面弹窗上可能找不到用户名密码这个元素
    driver.implicitly_wait(30)
    #访问一个网页
    driver.get("https://www.baidu.com")
    #找到登录点击
    driver.find_element_by_xpath('//*[@id="u1"]/a[@class="lb"]').click()
    #找到用户名密码登录方式
    driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()

    三、显性等待,明确提出要等什么,等某个条件满足后,去执行下一个

    1、明确等到某个条件满足之后,再去执行下一步操作。

    2、程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutEeception。

    3、WebDriverWait 显性等待类

    4、WebDriverWait(driver,等待时长,轮播周期).until()/until_not()

    5、expected_condition模块:提供了一系列的期望发生的条件

    6、presence_of_element_located:元素存在

    7、visibility_of_element_located:元素可见

    8、element_to_be_clickable:元素可点击

    这个类有很多判断方法的

    使用之前,引入相关的类:

    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_location = "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 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.Chrome(service_log_path='E:柠檬班二chromedriver_service.log')
    #访问一个网页
    driver.get("https://www.baidu.com")
    #找到登录点击
    driver.find_element_by_xpath('//*[@id="u1"]/a[@class="lb"]').click()
    
    #设置登录弹窗的显性等待,使用定位类型和值一起定位
    id = 'TANGRAM__PSP_10__footerULoginBtn'
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,id)))  #(By.ID,id)这里传的是个元组
    
    #找到用户名密码登录方式
    driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()
  • 相关阅读:
    内存溢出和内存泄漏的区别
    java 23种设计模式 深入理解
    关于安装office注册表权限的解决方法
    Tomcat在Linux上的安装与配置
    初窥Linux 之 我最常用的20条命令
    redis使用初体验
    学习进度条——第12周
    找水王
    学习进度条——第11周
    学习进度条——第10周
  • 原文地址:https://www.cnblogs.com/wuzm/p/12421811.html
Copyright © 2011-2022 走看看