介绍
测试的系统:白月黑羽网站的测试系统(白月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 自动化测试工具实战项目(窗口切换)
张小明
前端开发工程师
Windows 11 鼠标指针异常完全排查指南:指针旁边出现沙漏的解决方案
Windows 11 鼠标指针异常完全排查指南:指针旁边出现沙漏的解决方案 问题描述 在 Windows 11 系统中,鼠标指针旁边持续显示一个旋转的圆圈或沙漏(工作状态指示器),即使没有程序在运行。这种现象通常表现为: …
PLC的物料运输线控制系统的设计与实现
PLC的物料运输线控制系统的设计与实现 第一章 设计背景与核心目标 在制造业生产车间中,物料运输线是连接各生产工序的关键环节,传统人工运输或简易继电器控制的运输线存在效率低、同步性差、故障频发等问题,难以适配自动化生产线的连续运行需…
本科毕业设计开题报告系列之十二:本科开题答辩老师最常问的 8 个问题——为什么你写进材料里的每一句话,都要非常熟
目录前言:为什么你总觉得老师“在针对你”?1. 本科开题答辩的底层逻辑:只问你已经“承诺”的内容1.1 什么叫“你已经承诺的内容”?1.2 老师为什么不会随便问“超纲问题”?2. 本科开题答辩中最常见的 8 个问题3. 为什么…
500M以上大文件在PHP中如何分段上传并秒传?
PHP程序员外包项目救星:原生JS大文件传输系统(附前后端核心代码) 兄弟,作为在杭州接外包的老PHP程序员,太懂你现在的处境了——甲方爸爸要20G大文件上传,还要兼容IE8,预算卡得死死的࿰…
2.2 安全防护体系:如何防止API被恶意调用和刷量?
2.2 安全防护体系:如何防止API被恶意调用和刷量? 引言 在构建面向多业务方的平台服务时,安全防护是不可忽视的重要环节。恶意调用、刷量攻击、数据泄露等问题不仅会影响平台的稳定运行,还可能导致严重的业务损失和声誉损害。特别是在通知平台这类高频调用的服务中,如何有…
【2026 最新】白帽黑客自学网站全汇总(非常详细),零基础入门到精通,收藏即够用
七个合法学习黑客技术的网站,让你从萌新成为大佬_黑客网 合法的学习网站,以下这些网站,虽说不上全方位的满足你的需求,但是大部分也都能。能带你了解到黑客有关的技术,视频,电子书,实践…