web自动化学习06——元素等待

在定位元素时,由于网络或其它的原因,定位的元素不能及时加载出来,此时需要等待一段时间后才能定位到指定元素,"等待一段时间"的方法有三种;

1)强制等待  time.sleep(等待时间),单位:s

2)隐式等待 :implicitly_wait(time),单位:s

3)显示等待:WebDriverWait(驱动,timeout,poll_frequency=None,ignored_exceptions=None)

——driver:WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)

——timeout:最长超时时间,默认以秒为单位

——poll_frequency:休眠时间的间隔(步长)时间,默认为 0.5 秒,每隔0.5s去定位一次元素

——ignored_exceptions:超时后的异常信息,默认情况下抛 NoSuchElementException 异常

区别及优缺点:

1、强制等待(time.sleep()):在设置的时间范围内,如设置5s,则在5s内不管元素是否定位到,都需要等待5s后再进行下一步。元素可能在第1s或第2s就定位到,但是需要等待5s,比较浪费时间。但是每次定位元素都需要在定位元素的代码前编写显示等待的代码。

2、隐式等待(implicitly()):在设置的时间范围内,如设置5s,则在5s内定位的元素所在页面全部加载完毕,则进行下一步。定位的元素可能在第1s或第2s就定位到,但此时页面还未全部加载,需要继续等待,存在一定时间的浪费;(只需要在代码最前方写一次隐式等待的代码,后面定位的元素都会使用到)。

3、显示等待(WebDriverWait()):在设置的时间范围内,如设置5s,则在5s内定位到所需元素,则立即继续下一步,无需等待页面全部加载完成,不存在时间的浪费。但是每次定位元素都需要编写显示等待的代码。

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
class elementLocator_waittime_style():

    ‘‘‘
    元素等待方式:
    1)强制等待:time.sleep(2)
    2)显示等待:WebdriverWait()
    3)隐式等待:implicitly()
    ‘‘‘

    def __init__(self):
        #加启动配置
        option = webdriver.ChromeOptions()
        # 关闭“chrome正受到自动测试软件的控制”
        option.add_experimental_option(useAutomationExtension,False)
        #不自动关闭浏览器
        option.add_experimental_option(detach,True)
        self.driver = webdriver.Chrome(chrome_options=option)
        self.driver.get("http://www.baidu.com")
        self.driver.maximize_window()

    #强制等待
    def elementLocator_waittime_sleep(self):
        #强制等待5s,等待页面加载完成
        sleep(5)
        #定位到搜索输入框
        search_input = self.driver.find_element(By.ID,kw)
        #输入selenium等待时间
        search_input.send_keys(selenium等待时间)
        #等待2s
        sleep(2)
        #定位到搜索按钮
        search_button = self.driver.find_element(By.ID,su)
        #点击搜索按钮
        search_button.click()
        #等待3s关闭窗口
        sleep(3)
        self.driver.close()

    #显示等待
    def elementLocator_waittime_webdriverwait(self):

        search_input = WebDriverWait(self.driver,30,poll_frequency=1,ignored_exceptions="未找到元素").until(lambda s:s.find_element(By.ID,kw))
        search_input.send_keys("显性等待")
        #定位到搜索按钮
        search_button = WebDriverWait(self.driver,30,poll_frequency=1,ignored_exceptions="未找到搜索按钮元素").until(lambda s:s.find_element(By.ID,su))
        #点击搜索按钮
        search_button.click()
    #隐式等待
    def elementLocator_waittime_implicitly_wait(self):
        ‘‘‘
        30s内页面加载完毕则进行下一步,否则一直等待30s
        :return:
        ‘‘‘
        self.driver.implicitly_wait(30)
        #定位百度搜索输入框
        search_input = self.driver.find_element(By.ID,kw)
        #搜索隐式等待
        search_input.send_keys("隐式等待")
        #定位搜索按钮
        search_button = self.driver.find_element(By.ID,su)
        #点击搜索按钮
        search_button.click()
        #等待3s关闭浏览
        self.driver.quit()


elementLocator_waittime_style().elementLocator_waittime_webdriverwait()

 

web自动化学习06——元素等待

上一篇:SQL Server 索引和表体系结构(一)


下一篇:CSS居中对齐终极指南