(五)自动化测试之selenium学习心得-frame切换/窗口切换
1.frame切换
例子如下
from selenium import webdriver
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()
# 设置最大等待时长10s 隐式等待,缺省等待
wd.implicitly_wait(10)
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('http://cdn1.python3.vip/files/selenium/sample2.html')
# css表达式联合使用
# 先根据name属性值 'innerFrame',切换到iframe中
# wd.switch_to.frame('frame1')
wd.switch_to.frame(wd.find_element_by_css_selector('[src="sample1.html"]')) 这边注意一下我一开始wd.find_element加了s,报错,还好发现了,小细节注意一下哦!!
# 根据 class name 选择元素,返回的是 一个列表
elements = wd.find_elements_by_class_name('plant')
for element in elements:
print(element.text)
# 切换回最外部的HTML鈡
wd.switch_to.default_content()
# 然后再 选择操作 外部的 HTML 中 的元素
wd.find_element_by_id('outerbutton').click()
wd.quit()

有时候网页上面这边选择器可以定位到对象,实际获取不到,可以想想是不是因为frame或iframe框架的原因哦!!
这个 iframe 元素非常的特殊, 在html语法中,frame 元素 或者iframe元素的内部 会包含一个 被嵌入的 另一份html文档。
在我们使用selenium打开一个网页是, 我们的操作范围 缺省是当前的 html , 并不包含被嵌入的html文档里面的内容。
如果我们要 操作 被嵌入的 html 文档 中的元素, 就必须 切换操作范围 到 被嵌入的文档中。
2、窗口切换
例子:
from selenium import webdriver
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()
# 设置最大等待时长10s 隐式等待,缺省等待
wd.implicitly_wait(10)
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('http://cdn1.python3.vip/files/selenium/sample3.html')
link = wd.find_element_by_tag_name('a')
link.click()
print(wd.title)
wd.find_element_by_id('sb_form_q').send_keys('糖糖来迟博客园')
wd.quit()

完善如下:
from selenium import webdriver
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()
# 设置最大等待时长10s 隐式等待,缺省等待
wd.implicitly_wait(10)
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('http://cdn1.python3.vip/files/selenium/sample3.html')
link = wd.find_element_by_tag_name('a')
link.click()
print(wd.title)
#保存当前窗口句柄,后面需要返回的页面
mainWindow = wd.current_window_handle
#进入新窗口,通过遍历浏览器所有的窗口句柄,检查到自己想要的窗口并跳出
for handle in wd.window_handles:
wd.switch_to_window(handle)
if 'Bing' in wd.title:
break
print(wd.title)
wd.find_element_by_id('sb_form_q').send_keys('糖糖来迟博客园')
# 切换到主窗口,进行其他操作
wd.switch_to_window(mainWindow)
wd.find_element_by_id('outerbutton').click()
wd.quit()

浙公网安备 33010602011771号