web自动化系列-selenium的frame窗口切换(十四)

1.ifram和frameset介绍

frame :HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素 。它通常包含两种形式 ,iframe和frameset .

<iframe>标签规定一个内联框架,一个内联框架被用来在当前 HTML 文档中嵌入另一个文档,通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面。

表现形式为:

html 复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试网页</title>
</head>
<body>
<iframe src="/statics/demosource/demo_iframe.htm" name="iframe"></iframe>
<p><a href="https://www.baidu.com" target="iframe_a">测试网页</a></p>
<p><b>注意:</b> 因为 a 标签的 target 属性是名为 iframe_a 的 iframe 框架,所以在点击链接时页面会显示在 iframe框架中。</p>
</body>
</html>

其中HTML页面中有个以iframe开头的标签 ,它的属性name='iframe_a' ,这个就是一个内嵌的框架 。

<frameset>标签 在一个页面中设置一个或多个框架,用<frameset></frameset>代替了<body></body>,不能出现在body标签里。它的表现形式为:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Frameset Example</title>
</head>
<frameset cols="50%,50%">
    <frame src="page1.html" name="frame1">
    <frame src="page2.html" name="frame2">
</frameset>
</html>

需要注意的是,由于 framesets 和 frames 已经被视为过时技术,并且在现代 web 开发中很少使用,因此许多现代浏览器可能不再支持 framesets,或者对其支持有限。此外,framesets 在无障碍性和可维护性方面存在许多问题,因此通常不建议在新的 web 项目中使用。

2.具体案例

出现以上形式的页面,通过以前介绍的方法是无法定位的 ,需要用到如下的方法才能操作 。

以下为selenium提供的方法 :

python 复制代码
# 方法
1. driver.switch_to.frame(frame_reference) : 其中frame_reference的值就是frame标签中的id或name的值 。
2. driver.switch_to.default_content() :恢复默认页面方法

具体代码 :

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置 WebDriver 路径(根据你的实际路径进行调整)
chrome_driver_path = '/path/to/chromedriver'

# 初始化 WebDriver
driver = webdriver.Chrome(executable_path=chrome_driver_path)

# 打开 frameset 页面
driver.get('file:///path/to/your/frameset_page.html')

# 切换到name为 'frame1' 的 框架上
driver.switch_to.frame('frame1')


# 定位 page1.html 中的元素
# 假设你要定位一个 id 为 'myElement' 的元素
driver.until(EC.presence_of_element_located((By.ID, 'myElement'))).click()

# 如果需要切换回主页面或其他 frame,可以使用
# driver.switch_to.default_content()
# 或者
# driver.switch_to.frame('otherFrameName')

# 关闭浏览器
driver.quit()

再比如qq空间就是iframe布局 ,登录qq空间主页 ,点击登录 ,就必须使用这个切换 。代码示例:

python 复制代码
url = "http://i.qq.com"
driver.switch_to.frame('login_frame') # 切换到login_frame框架
driver.find_element_by_id("switcher_plogin").click()

3.项目效果

相关推荐
斯特凡今天也很帅15 小时前
python测试SFTP连通性
开发语言·python·ftp
sunywz15 小时前
【JVM】(4)JVM对象创建与内存分配机制深度剖析
开发语言·jvm·python
wheelmouse778815 小时前
如何设置VSCode打开文件Tab页签换行
java·python
DX_水位流量监测15 小时前
无人机测流之雷达流速仪监测技术分析
大数据·网络·人工智能·数据分析·自动化·无人机
0思必得016 小时前
[Web自动化] Selenium基础介绍
前端·python·selenium·自动化·web自动化
cly116 小时前
Ansible自动化(十二):Jinja2过滤器
运维·自动化·ansible
cly116 小时前
Ansible自动化(十三):调试与优化
数据库·自动化·ansible
cly116 小时前
Ansible自动化(十四):Roles(角色)
服务器·自动化·ansible
2501_9311624316 小时前
大疆相机:空中影像新境界
python
测试199816 小时前
Web自动化测试入门
自动化测试·软件测试·python·功能测试·selenium·测试工具·测试用例