介绍
测试的系统:白月黑羽网站的测试系统(白月SMS系统)
测试内容:点击【学习教程】链接跳转到白月黑羽网站,获取此网站上的标题,然后回到原来的系统。
所涉及的知识点:frame切换/窗口切换
这个iframe元素非常的特殊,在html语法中,frame元素或者iframe元素的内容会包含一个被嵌入的零一份html文档。
在我们使用selenium打开一个网页是,我们的操作范围缺省是当前的html,并不包含被嵌入的html文档里面的内容。
如果我们要操作被嵌入的html文档中的元素,就必须切换操作范围到被嵌入的文档中。
切换到Frame(3种方式)
# 方式1:通过索引切换(第1个iframe,从0开始)driver.switch_to.frame(0)# 方式2:通过 name 或 id 属性切换driver.switch_to.frame("frame-name")# name="frame-name"driver.switch_to.frame("frame-id")# id="frame-id"# 方式3:通过 WebElement 对象切换(最灵活,推荐)iframe=driver.find_element(By.CSS_SELECTOR,"iframe.class-name")driver.switch_to.frame(iframe)切回主文档/父级Frame
# 切回父级 Frame(如果有多层嵌套,只向上退一层)driver.switch_to.parent_frame()# 切回最外层的主文档(彻底退出所有 iframe)driver.switch_to.default_content()
自动化测试程序
fromseleniumimportwebdriverfromtimeimportsleepfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECclassRedirect:def__init__(self):self.driver=webdriver.Chrome()defLogin(self,username,password):self.driver.get('http://127.0.0.1/mgr/sign.html')usernameElement=self.driver.find_element(By.ID,'username')usernameElement.send_keys(username)sleep(2)passwordElement=self.driver.find_element(By.ID,'password')passwordElement.send_keys(password)sleep(2)# 点击登录submitElement=self.driver.find_element(By.XPATH,"//div[@class='col-xs-12']/button")submitElement.click()sleep(2)print('登录成功~')defRedirectByhy(self):#mainWindow变量保存当前窗口的句柄mainWindow=self.driver.current_window_handle#定位跳转的新窗口链接iframe=self.driver.find_element(By.XPATH,'//footer/div/a')href=iframe.get_attribute('href')iframe.click()# 等待新窗口出现(窗口数量增加)WebDriverWait(self.driver,10).until(EC.number_of_windows_to_be(2))#切换到新窗口forhandleinself.driver.window_handles:ifhandle!=mainWindow:self.driver.switch_to.window(handle)breakself.driver.get(f'{href}')sleep(2)titleElements=self.driver.find_elements(By.XPATH,'//div[@id="nav-topics"]/a')fortitleintitleElements:print(title.text)print('【本次测试结束!!!!】')if__name__=='__main__':Re=Redirect()Re.Login('byhy','88888888')Re.RedirectByhy()
selenium 自动化测试工具实战项目(窗口切换)
张小明
前端开发工程师
excel 中如何快速归一化
B2/$G2B2 → 当前单元格的数据(要处理的值)$G2 → 除数$G → 锁定列 G(横向拖动公式时不会变列)2 → 行号相对(纵向填充公式时会自动变行)方法 A:横向先填充,再纵向填充 方法 B&…
AI Agent:2026年AI生态核心与开发实践指南
AI Agent是具备自主决策、规划和执行能力的数字实体,是2026年AI生态核心。主流架构包括感知、规划/推理、行动、记忆和反思/评估等组件。A2A协议促进Agent间协作,MCP标准化工具调用,Agent Skills实现能力模块化,使开发者能像搭乐高…
1.4 事务消息机制:如何确保重要通知100%送达用户?
1.4 事务消息机制:如何确保重要通知100%送达用户? 引言 在分布式系统中,确保重要消息的可靠传递是一个关键挑战。特别是在金融、电商等对数据一致性要求极高的场景中,任何一条重要通知的丢失都可能导致严重的业务后果。例如,用户支付成功后没有收到确认通知,或者系统关…
打造你的家庭 AI 助手(二):飞书机器人接入你的 OpenClaw
在上一篇文章中,我们完成了 OpenClaw 的安装和基础配置。现在,让我们把这只「小龙虾」接入飞书,用手机就能远程控制你的 AI 助手。 第一步:在飞书开放平台创建应用 1.1 进入飞书开放平台 打开浏览器,访问飞书开放平台&…
2026冲刺用!千笔写作工具,顶流之选的AI论文平台
你是否曾为论文选题发愁,反复修改却总对表达不满意?是否在深夜面对空白文档文思枯竭,又担心查重率过高?论文写作的每一个环节都让人倍感压力。而今,随着2026届毕业季临近,越来越多学生开始寻找高效、专业的…
2.1 业务方接入方案:让所有团队都能快速集成通知服务
2.1 业务方接入方案:让所有团队都能快速集成通知服务 引言 在构建平台类服务时,如何让业务方能够快速、安全地接入是至关重要的。一个好的接入方案不仅需要提供简单易用的API,还需要具备完善的安全机制、灵活的配置管理以及良好的文档支持。 本节我们将深入探讨通知平台的…