介绍
测试的系统:白月黑羽网站的测试系统(白月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 自动化测试工具实战项目(窗口切换)
张小明
前端开发工程师
Agent Skills标准:让AI Agent按需挂载能力,国内skill0平台已上线
Anthropic推出的Agent Skills是一套可复用指令集,让AI Agent按需挂载能力,解决提示词痛点。Skills具有可组合、可移植、高效特点,已被OpenAI等主流工具兼容。国内特赞团队的skill0平台已聚合423个Skills,支持多款工具直接装配。Sk…
RAG技术深度剖析:让大模型从“瞎编“到“有据可依“的三大形态与应用指南
文章系统介绍了RAG(检索增强生成)技术的三大核心形态:传统RAG通过检索知识增强回答准确性;Graph RAG利用知识图谱理解信息间关系;Agentic RAG赋予AI自主解决问题能力。详细讲解了RAG的落地策略、注意事项、技术选型和实…
专科生必看!千笔,倍受青睐的降AI率工具
在AI技术迅速渗透学术写作领域的当下,越来越多的学生开始借助AI工具提升论文撰写效率。然而,随着查重系统对AI生成内容的识别能力不断增强,如何有效降低AI率和重复率,已成为毕业论文写作中的核心难题。许多学生在使用各类降AI率工…
算力租赁选择指南:如何根据应用场景匹配计算资源
人工智能技术当下的快速发展进程里,算力已然成了驱动创新的核心资源,对于多数企业、研究机构以及开发者来讲,自行建造高性能的计算中心,不但成本极其高昂,而且还面临着技术迭代飞快,运维复杂不已࿰…
dp->单变量记录优化
lc1653dp/* 输入:s "aababbab" 输出:2 */ class Solution { public:int minimumDeletions(string s){int ns.size();vector<vector<int>> dp(n1,vector(2,0));for(int i1;i<n;i){if(s[i-1]a){dp[i][0]dp[i-1][0];dp[i][1]dp[i…
深度测评!千笔,MBA论文写作神器
你是否曾为论文选题而苦恼?是否在撰写过程中感到思路混乱、资料不足?又或者,面对查重率和格式问题反复修改却依然无法达到满意效果?MBA论文写作不仅需要扎实的学术功底,更考验时间管理和效率。在无数个深夜里ÿ…