介绍
测试的系统:白月黑羽网站的测试系统(白月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 自动化测试工具实战项目(窗口切换)
张小明
前端开发工程师
直接上结论:8个降AIGC工具测评,专科生降AI率必备攻略
在当前的学术写作环境中,AI生成内容(AIGC)已经成为高校和研究机构重点关注的对象。尤其是对于专科生来说,论文中如果存在明显的AI痕迹,不仅会影响查重率,还可能被判定为学术不端行为。因此,如何…
大模型驱动的智能体系统:架构设计与技术实现
本文详细探讨了基于大语言模型的智能体系统设计与实现,包括LLM在智能体中的核心作用、三层架构设计、上下文管理与记忆模块,以及与API和向量数据库的集成。介绍了ReAct、Hugging Face和LangChain等关键框架,并通过金融智能客服等实例展示了完…
直接上干货,今天手把手教你在MATLAB里用FFT搞信号频谱分析。准备好你的MATLAB 2018b以上版本,咱们边写代码边唠嗑
matlab fft 快速傅里叶变换 双边谱,单边谱,相位谱 基于matlab2018b及以上版本实现 对信号做fft,然后绘制其双边谱,单边谱,和对应的相位谱 有详细介绍并附带注释,保证可以运行 附带一份数据,可以…
区块链商业价值预测数据分析
摘要:根据Gartner数据,区块链商业价值发展可分为三个阶段:探索期(2018-2022)年均增长22.6%,加速期(2023-2027)年均增长55.2%,成熟期(2028-2030)年均增长51.7%。预计2030年市场规模将达1360亿美元,复合年增长…
HCCL Profiling通信耗时埋点与Timeline生成
摘要 在大规模分布式训练中,通信效率直接决定整体性能。HCCL Profiling通过精准的通信操作耗时埋点,生成可视化Timeline,为性能瓶颈定位提供数据支撑。本文将深度解析/hccl/profiler/trace_collector.cpp的实现机制,演示AllReduc…
如何使用PHP实现500M以上文件夹的批量上传方案?
技术开发日记 - 毕业设计《企业级加密文件管理系统》攻坚实录 学生:陕西某高校软件工程大三学生 目标:打造高含金量毕业设计求职作品集核心项目 一、需求分析与技术选型 1. 核心需求拆解 军工级加密要求:地质局客户要求SM4国密算法传输&…