python与selenium自动化基础-测试脚本中等待方法

1、等待是为了使脚本执行更加稳定
2、常用的休眠方式:time模块的sleep方法

浏览器等待
1) 显示等待
    显示等待是根据条件进行等待,等待条件出现
    实现:
        from selenium.webdriver.common.by import By
        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.support import expected_conditions as EC

        WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
    WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,
    默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置
    时间检测不到则抛出异常。

from selenium import webdriver
# 导入By
from selenium.webdriver.common.by import By
# 导入webdriver等待类
from selenium.webdriver.support.ui import WebDriverWait
# 导入预期条件设置类
from selenium.webdriver.support import expected_conditions as EC

# 创建一个浏览器
driver = webdriver.Firefox()

# 访问百度
url = 'http://www.baidu.com'
driver.get(url)

# 浏览器总共等待10秒,在10秒内,每隔0.5秒去使用id的方式定位一下元素,如果定位到,就结束等待,如果定位不到同时没有大于10秒,则继续等待
el = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'lg')))

driver.close()

2)隐式等待
    隐式等待是根据是件进行等待,等待特定时间
        driver.implicitly_wait(n)
    n的单位为秒,n为最大值,在这个最大值内只要元素定位到就结束等待
优先 隐式等待     次之 显式等待 最次 固定等待

selenium模块中的等待方法
implicitly_wait()    设置webdriver等待时间,查找所有元素的等待时间
WebDriverWait    等待条件满足或者超时后退出   from selenium.webdriver.support.ui import WebDriverWait

from selenium import webdriver
d = webdriver.Firefox()
d.get('https://www.baidu.com/')
d.implicitly_wait(5)
d.find_element_by_id('kw').send_keys("慕课网")
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
def get_ele_times(driver,times,func):
    return WebDriverWait(driver,times).until(func)
def test():
    d = webdriver.Firefox()
    d.get('https://www.baidu.com/')
    d.find_element_by_id('kw').clear()
    d.find_element_by_id('kw').send_keys("慕课网")
    d.find_element_by_id('su').click()
    ele = get_ele_times(d, 10,
                        lambda d: d.find_element_by_partial_link_text('程序员的梦工厂'))
    ele.click()
    time.sleep(10)
    print(d.window_handles)
    d.switch_to.window(d.window_handles[1])
    print(d.current_window_handle)
    d.quit()
test()

原文地址:https://www.cnblogs.com/peiya/p/12144720.html