zoukankan      html  css  js  c++  java
  • Python+Selenium设置元素等待

    显式等待

    显式等待使 WebdDriver 等待某个条件成立时继续执行,否则在达到最大时长时抛弃超时异常 (TimeoutException)。

    #coding=utf-8

    from selenium import webdriver

    from selenium.webdriver.common.by import By

    from selenium.webdriver.support.ui import WebDriverWait

    from selenium.webdriver.support import expected_conditions as EC

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

    element = WebDriverWait(driver,5,0.5).until( EC.presence_of_element_located((By.ID,"kw")) )

    element.send_keys('selenium') driver.quit()

    expected_conditions 类提供一些预期条件的实现:

    title_is 用于判断标题是否 xx

    title_contains 用于判断标题是否包含 xx 信息

    presence_of_element_located 元素是否存在

    visibility_of_element_located 元素是否可见

    visibility_of 是否可见

    presence_of_all_elements_located 判断一组元素是否存在

    text_to_be_present_in_element 判断元素是否有xx文本信息

    text_to_be_present_in_element_value 判断元素值是否有xx文本信息

    frame_to_be_available_and_switch_to_it 表单是否可用,并切换到该表单

    invisibility_of_element_located 判断元素是否隐藏

    element_to_be_clickable 判断元素是否点击,它处于可见和启动状态

    staleness_of 等到一个元素不再是依附于DOM

    element_to_be_selected 被选中的元素

    element_located_to_be_selected 一个期望的元素位于被选中

    element_selection_state_to_be 一个期望检查如果给定的元素被选中

    element_located_selection_state_to_be 期望找到一个元素并检查是否选择状态

    alert_is_present 预期一个警告信息

    除了 expected_conditions 所提供的预期方法,我们也可以使用前面学过的 is_displayed()方法来判断元 素是否可:

    #coding=utf-8

    from selenium import webdriver

    from selenium.webdriver.support.ui import WebDriverWait

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

    input_ = driver.find_element_by_id("kw") element = WebDriverWait(driver,5,0.5).until( lambda driver : input_.is_displayed())

    input_.send_keys('selenium')

    driver.quit()

    隐式等待

    隐式等待是通过一定的时长等待页面所元素加载完成。哪果超出了设置的时长元素还没有被加载测抛NoSuchElementException 异常。WebDriver 提供了

     implicitly_wait()方法来实现隐式等待,默认设置为 0。它 的用法相对来说要简单的多。

    from selenium.webdriver.support.ui import WebDriverWait

    driver.implicitly_wait(10)

    implicitly_wait()默认参数的单位为秒,本例中设置等待时长为 10 秒,首先这 10 秒并非一个固定的等 待时间,它并不影响脚本的执行速度。其次,它并

    不真对页面上的某一元素进行等待,当脚本执行到某个 元素定位时,如果元素可定位那么继续执行,如果元素定位不到,那么它将以轮询的方式不断的判

    断元素 是否被定位到,假设在第 6 秒钟定位到元素则继续执行。直接超出设置时长(10 秒)还没定位到元素则抛 出异常。

    sleep休眠方法

    有时间我们希望脚本执行到某一位置时做固定时间的休眠,尤其是在脚本调试的过程中。那么可以使用 sleep()方法,需要说明的是 sleep()由 Python 的 time 模块提供。

    from time import sleep

    sleep(2)

    调用自己定义的函数

    我们还可以调用自己写的方法去查找元素。

    def smart_find_element(driver,byType,value):
        ele = None;
        max_time = 10;
        times = 0;
        while(ele == None):
            try:
                ele = driver.find_element(byType,value);
            except :
                times += 1;
                if(times > max_time):
                    raise Exception("can not find element");
                sleep(1);
        if(ele != None):
            return ele;

    调用方法如下:

    import SupportUtil 

    #SupportUtil为方法存放的.py文件名
    SupportUtil.smart_find_element(driver,By.CLASS_NAME,"search-icon").click()

  • 相关阅读:
    序列化与反序列化
    反射学习 :反射程序集
    转载 [TopLanguage]: 马一哥对开发“过程”的描述
    DNS域名规则
    Joel Spolsky: 好的界面设计应当符合用户预期
    开始在博客园中写博客
    2009牛年的答卷及2010虎年的题目
    Jenkins安装使用教程
    git第一次上传代码
    allure安装配置集成测试报告
  • 原文地址:https://www.cnblogs.com/AmyHu/p/10586564.html
Copyright © 2011-2022 走看看