2026/4/18 8:26:58
网站建设
项目流程
网站建设长尾关键词,广州市网站建设哪里有,淘客网站做百度推广,好看的网站首页设计前言
selenium的作用域切换 selenium在处理元素时遇见新窗口、网页嵌套网页、网页的原生弹窗#xff0c;无法进行直接处理作用域里元素的内容#xff0c;需要通过切换作用域来处理此类问题。
selenium三种作用域切换#xff1a; ①、window窗口切换 ②、iframe切换 ③、al…前言selenium的作用域切换selenium在处理元素时遇见新窗口、网页嵌套网页、网页的原生弹窗无法进行直接处理作用域里元素的内容需要通过切换作用域来处理此类问题。selenium三种作用域切换①、window窗口切换②、iframe切换③、alert弹窗切换window窗口切换以百度为例在原百度的网页上点击超链接后会打开一个新的网页这个时候如果需要定位新的网页上的元素就需要切换作用域了。切换作用域实现方案使用driver.window_handles可以获取全部网页的索引并且将索引存放于一个数组中因此可以通过数组取值的方式实现切换网页作用域driver.switch_to.window(driver.window_handles[-1])切换作用域后原网页上就无法进行元素定位了可以通过数组下标取值的方式将作用域切换为原网页driver.switch_to.window(driver.window_handles[0])代码实现from selenium import webdriver #打开浏览器 driver webdriver.Chrome(chromedriver.exe) driver.maximize_window() #打开网页 driver.get(https://www.baidu.com/) driver.find_element_by_link_text(hao123).click() #会跳转一个新的hao123的窗口此时就无法操作原百度网页的窗口了因此需要切换作用域 #获取所有网页的索引:driver.window_handles # print(driver.window_handles) #打印出来的值是一个数组[37554D9C36A0A691571C87C250434881, 860CA08A7CEEB72959449FCB3B75D146]因此可以通过数组取值的方式实现切换网页作用域 driver.switch_to.window(driver.window_handles[-1]) #把driver切换到最新弹出来的窗口 print(driver.title) #获取当前网页的标题 driver.find_element_by_xpath(//*[idsearch]/form/div[2]/input).send_keys(csdn)iframe切换在某些后台管理系统中网页中嵌套小网页这种情况是没有办法直接处理小网页的大网页的内容是可以直接处理的识别小网页怎么查看哪些页面是嵌套小网页的iframe通常在大网页中是以iframe标签存在的标签里面也会有html的标签。我们可以通过源代码或者右键空白区域去判断是否存在【重新加载框架选项】①源代码查看标签判断定位元素后去代码前后找是否有iframe标签且里面还有html标签②右键空白区域查看是否存在【重新加载框架选项】判断切换作用域先找到iframe标签的id值然后定位元素再使用driver.switch_to.frame()方法切换。相同的道理切换作用域后原网页就无法进行元素的定位可将作用域切换回原网页driver.switch_to.default_content()代码实现from selenium import webdriver driver webdriver.Chrome(chromedriver.exe) driver.maximize_window() driver.get(https://passport2.eastmoney.com/pub/login) #作用域从大网页切换到小网页(不同版本的selenium有以下两种写法) driver.switch_to.frame(driver.find_element_by_id(frame_login) ) #frame_login为frame标签的id值 driver.switch_to.frame(frame_login) #输入框的xpath//*[idtxt_mobile] driver.find_element_by_xpath(//*[idtxt_mobile]).send_keys(110) #把作用域从小网页切换到大网页(不同版本的selenium有以下两种写法) driver.switch_to.default_content() driver.switch_to.parent_frame() #/html/body/div[1]/div/div/h1 e driver.find_element_by_xpath(/html/body/div[1]/div/div/h1) print(e.text) #能成功打印说明小网页切换大网页成功了alert弹窗切换alert窗口就是js提示框它是浏览器原声的弹窗不属于web界面所以在有这个提示框的作用下我们是无法继续web操作的必须先处理掉js弹窗才可以继续。Alert类提供了四个方法来处理弹窗driver.switch_to.alert.accept() # 确定操作 driver.switch_to.alert.dismiss() # 取消操作 driver.switch_to.alert.send_keys() # alert弹框输入文本 driver.switch_to.alert.text() # 获取alert的文本内容代码实现from selenium import webdriver import time #打开浏览器获得浏览器句柄 driver webdriver.Chrome(chromedriver.exe) driver.maximize_window() driver.get(http://localhost:8080/selenium/selenium6.html) #xpath:/html/body/a driver.find_element_by_xpath(/html/body/a).click() time.sleep(10) #等待10s查看弹窗关闭效果 driver.switch_to.alert.accept() # 确定操作 driver.switch_to.alert.dismiss() # 取消操作 driver.switch_to.alert.send_keys() # alert弹框输入文本 driver.switch_to.alert.text() # 获取alert的文本内容登录验证在做自动化测试时有些图形化的验证码很复杂验证码的作用是为了防止自动化工具可以有以下几种方式去处理它万能码深度学习使用cookie绕过登录服务器验证用户身份的方式有两种第一种是使用cookie和session的方式第二种是使用token的方式。第一种验证方式下我们可以使用已经登录账号的cookie来伪造账号已经登录了cookie理解比如用户登录了某个网站后再次刷新这个页面去请求服务器如果没有相关机制的话服务器是不知道这个请求是否还是刷新之前登录的用户发出来的。此时为了维持用户的登录状态即为了使服务器能够识别页面刷新之后的请求就可以使用cookie机制。用户A第一次请求服务器后服务器会自动生成一个暗号并将这个暗号的一部分返回给用户A用户A将其以cookie的方式存起来下次再次访问的时候会自动把cookie带上服务器拿到cookie后将其与自己的进行比对识别出是用户A以此类推不同的用户有不同的暗号服务器通过这种方式以此来识别各个用户。为什么要这样做请求时用的是http协议http协议有一个特点就是无状态即服务器在每次请求时他不知道谁是谁为了解决这个问题就诞生了cookie和session机制。在服务器上以session的形式存在用户端以cookie的形式存在。例如用户A已经登录在服务器上对应的session就会是登录状态用户A再次请求服务器就不会让用户A再进行以此登录操作了。所以cookie绕过登录其实是登录状态保持而不是真的不需要登录cookie只是一个暗号所有的登录记录都是存在session里使用cookie绕过登录的实现①第一步获取已经登录的cookiefrom selenium import webdriver import time driver webdriver.Chrome(chromedriver.exe) driver.maximize_window() driver.get(https://www.bilibili.com/) #第一步获取已经登录的cookie手工抓取 time.sleep(60) #等待的时间用于手动登录 print(driver.get_cookies())②第二步手动添加已经登录的cookie在添加之前需要将原有的cookie删掉由于Selenium每次启动的浏览器是一个隔离的环境不能直接使用本地已经保存的Cookies值我们需要通过driver的add_cookie()方法手动添加Cookies#第二步手动添加已经登录的cookie在添加之前需要将原有的cookie删掉 driver.delete_all_cookies() #下面是刚才获取的cookie是以数组形式存在的可遍历添加cookie cookies [{xxxxx}] for cookie in cookies: driver.add_cookie(cookie)③、第三步刷新网页#刷新网页driver.refresh()最后作为一位过来人也是希望大家少走一些弯路在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈这些资料希望能给你前进的路上带来帮助。视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。