一, 显隐式等待
1,显示等待
含义:最长等待XX秒直到定位到某元素进行下一步,达到最大时长还没定位到时抛出超时异常(TimeoutException)
1)调用方法:
- 导包 等待类 --> from selenium.webdriver.support.wait import WebDriverWait
- 导包 判断条件 (将expected_conditions 通过as关键字起个别名:EC) --> from selenium.webdriver.support import expected_conditions as EC
- WebDriverWait(driver, timeout, poll_frequency=0.5)
1). driver:浏览器对象
2). timeout:超时的时长,单位:秒
3). poll_frequency:检测间隔时间,默认为0.5秒 - 调用方法 until(method):直到…时
1). method:调用EC.presence_of_element_located(element)
element:调用By类方法进行定位
2) 代码示例
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
url = r'C:\test\注册A.html'
driver = webdriver.Firefox()
driver.get(url)
# 最长等待5秒,直到定位到userA元素
element = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.ID, 'userA')))
element.send_keys("admin")
2,隐式等待
含义:如果定位某一元素定位失败,那么就会触发隐式等待有效时长,如果在指定时长内加载完毕,则继续执行,否则抛出NoSuchElementException异常,如果元素在第一次就定位到则不会触发隐式等待时长。较为常用
调用方法:
driver.implicitly_wait(10)
(driver:为浏览器实例化对象名称)
二,frame表单切换
frame表单:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素;(HTML语言中,frame/iframe标签为表单框架)
调用方法
1).
a)若iframe具有id属性,直接使用id属性值切换进内层页面
driver.switch_to.frame(value)
b) 定位到iframe元素,再切换进入
el = driver.find_element_by_xxx(value)
driver.switch_to.frame(el)
2).
a). 跳回最外层的页面
driver.switch_to.default_content() – 切换到最外层(对于多层页面,可通过该方法直接切换到最外层)
b).跳回上层的页面
driver.switch_to.parent_frame() – 进行向上的单层切换
在frame表单中操作其他页面,必须先回到默认页面,才能进一步操作)
三,多窗口切换
说明:在WebDriver中封装了获取当前窗口句柄方法和获取所有窗口句柄的方法以及切换指定句柄窗口的方法;
(句柄:英文handle,窗口的唯一识别码)
调用方法:
1). driver.current_window_handle --> 获取当前窗口句柄
2). driver.window_handles --> 获取所有窗口句柄
3). driver.switch_to.window(handle) --> 切换指定句柄窗口
四,窗口截图
说明:在WebDriver类库中,提供了截图方法,我们只需要调用即可;
调用方法:
1). driver.get_screenshot_as_file(imgpath) --> 截取当前窗口(imgpath:图片保存路径)