zoukankan      html  css  js  c++  java
  • Appium-Python3--UI自动化-[-7-]-强制等待:sleep,隐式等待:implicitly_wait,显示等待:WebDriverWait()--

    一、强制等待sleep()

    '''
    设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。
    缺点:不智能,使用太多的sleep会影响脚本运行速度。
    '''
    
    import time
    sleep(10)  #等待10秒

    二、隐式等待:implicitly_wait()

    '''
    由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,
    它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。
    如果超出了设置时间的则抛出异常。
    ''' driver.implicitly_wait(10) #隐式等待10秒

    需要特别说明的是:隐性等待对整个driver的周期都起作用,所以只要设置一次即可,有人把隐性等待当成了sleep在用,走哪儿都来一下…

    三、显示等待:WebDriverWait()

    from selenium.webdriver.support.wait import WebDriverWait
    
    
    WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
    
    '''
    driver: 传入WebDriver实例,即我们上例中的driver
    timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
    poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒
    ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,
    如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。
    until method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False message: 如果超时,抛出TimeoutException,将message传入异常
    until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同,不再赘述。
    '''

    看了以上内容基本上很清楚了,调用方法如下:

    WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

    可执行方法包含:

    expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件:

    from selenium.webdriver.support import expected_conditions as EC

    判断当前页面标题是否为title

    title_is(title)

    title:期望的页面标题
    判断当前页面标题是否包含title
    title_contains(title)

    title:期望的页面标题
    判断此定位的元素是否存在
    presence_of_element_located(locator)

    locator:元素的定位信息
    判断页面网址中是否包含url
    url_contains(url)

    url:期望的页面网址
    判断页面网址是否为url
    url_to_be(url)

    url:期望的页面网址
    判断页面网址不是url
    url_changes(url)

    url:期望的页面网址
    判断此定位的元素是否可见
    visibility_of_element_located(locator)

    locator:元素的定位信息
    判断此元素是否可见
    visibility_of(element)

    element:所获得的元素
    判断此定位的一组元素是否至少存在一个
    presence_of_all_elements_located(locator)

    locator:元素的定位信息
    判断此定位的一组元素至少有一个可见
    visibility_of_any_elements_located(locator)

    locator:元素的定位信息
    判断此定位的一组元素全部可见
    visibility_of_all_elements_located(locator)

    locator:元素的定位信息
    判断此定位中是否包含text_的内容
    text_to_be_present_in_element(locator, text_)

    locator:元素的定位信息
    text_:期望的文本信息
    判断此定位中的value属性中是否包含text_的内容
    text_to_be_present_in_element_value(locator, text_)

    locator:元素的定位信息
    text_:期望的文本信息
    判断定位的元素是否为frame,并直接切换到这个frame中
    frame_to_be_available_and_switch_to_it(locator)

    locator:元素的定位信息
    判断定位的元素是否不可见
    invisibility_of_element_located(locator)

    locator:元素的定位信息
    判断此元素是否不可见
    invisibility_of_element(element)

    element:所获得的元素
    判断所定位的元素是否可见且可点击
    element_to_be_clickable(locator)

    locator:元素的定位信息
    判断此元素是否不可用
    staleness_of(element)

    element:所获得的元素
    判断该元素是否被选中
    element_to_be_selected(element)

    element:所获得的元素
    判断定位的元素是否被选中
    element_located_to_be_selected(locator)

    locator:元素的定位信息
    判断该元素被选中状态是否和期望状态相同
    element_selection_state_to_be(element,Boolean)

    element:所获得的元素
    Boolean:期望的状态(True/False)
    判断定位的元素被选中状态是否和期望状态相同
    element_located_selection_state_to_be(locator,Boolean)

    locator:元素的定位信息
    Boolean:期望的状态(True/False)
    判断当前浏览器页签数量是否为num
    number_of_windows_to_be(num)

    num:期望的页签数量
    判断此handles页签不是唯一打开的页签
    new_window_is_opened(handles)

    handles:页签
    判断是否会出现alert窗口警报
    alert_is_present()
    ————————————————
    版权声明:本文为CSDN博主「许西城」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/CCGGAAG/article/details/86763952

    例子1:presence_of_element_located()需要定位倒计时结束后的  【知道啦】按钮,并点击

     上代码:

    wait_element_by_xpath
    from selenium.common.exceptions import NoSuchElementException
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    def wait_element_by_xpath(driver, timeout, element_text,poll_frequency=0.5, element_by="xpath",ignored_exceptions=None):
    
    
        """
        等待元素出现
        :param driver:
        :param timeout: 最长超时时间,默认以秒为单位
        :param element_text:
        :param poll_frequency: 检测的间隔步长,默认为0.5s
        :param element_by:
        :param ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementException异常。
        :return:
        """
        loc = (element_by, "//*[@text='%s']" % element_text)
        MyLog.logger().info(loc)
        e = WebDriverWait(driver, timeout, poll_frequency,ignored_exceptions).until(EC.presence_of_element_located(loc))
    
        e.click()

    调用

    find_element.wait_element_by_xpath(self.driver,2,"知道啦")

     例子2:title_contains

    打开百度网页
    WebDriverWait(driver, 15, 0.5).until(EC.title_contains("百度一下"))
  • 相关阅读:
    对象访问方式
    GC回收的对象
    邮件工具类
    java内存区域
    RabbitMQ的安装
    Flask信号
    DBUtils数据库连接池
    Flask蓝图基本使用
    Flask中使用cookie和session
    Flask中的CBV
  • 原文地址:https://www.cnblogs.com/chushujin/p/12307746.html
Copyright © 2011-2022 走看看