一、iframe 或 frame切换
1.使用 WebDriver 对象的 switch_to 属性,像这样
driver.switch_to.frame(frame_reference)
其中, frame_reference 可以是 frame 元素的属性 name 或者 ID 。
比如这里,就可以填写 iframe元素的id ‘frame1’ 或者 name属性值 ‘innerFrame’。
像这样
driver.switch_to.frame(‘frame1’)
或者
driver.switch_to.frame(‘innerFrame’)
2.也可以填写frame 所对应的 WebElement 对象。
我们可以根据frame的元素位置或者属性特性,使用find系列的方法,选择到该元素,得到对应的WebElement对象
比如,这里就可以写
driver.switch_to.frame(wd.find_element_by_tag_name(“iframe”)) 用css也可以
3.切回外层方法,进行操作
driver.switch_to.default_content()
-===============================================================================-
二、切换窗口
1.那么我们就可以通过 类似下面的代码,
for handle in wd.window_handles:
# 先切换到该窗口
wd.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if ‘Bing’ in wd.title:
# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
上面代码的用意就是:
我们依次获取 wd.window_handles 里面的所有 句柄 对象, 并且调用 wd.switch_to.window(handle) 方法,切入到每个窗口,然后检查里面该窗口对象的属性(可以是标题栏,地址栏),判断是不是我们要操作的那个窗口,如果是,就跳出循环。
2.切回原来窗口
因为我们一开始就在 原来的窗口里面,我们知道 进入新窗口操作完后,还要回来,可以事先 保存该老窗口的 句柄,使用如下方法
#(mainWindow变量保存当前窗口的句柄)
mainWindow = driver.current_window_handle
切换到新窗口操作完后,就可以直接像下面这样,将driver对应的对象返回到原来的窗口
#(通过前面保存的老窗口的句柄,自己切换到老窗口)
driver.switch_to.window(mainWindow)