在自动化测试过程中,会遇到打开新窗口的的情况,这时候需要进行句柄切换来对新窗口进行一系列的操作。
一、什么时候需要用到切换
1、有时候当我们使用selenium,模拟网页点击的时候,会出现一个新的窗口或者新的标签。但是,此时,我们的driver没有及时更新,还是开始页面时的那个窗口的模拟登入(其实也就是一个句柄,“句柄是一种特殊的智能指针”,这个句柄指向最开始的页面)。但是,当我发生点击动作的时候,页面发生切换,但是句柄还是原始的句柄,此时我们需要切换句柄操作,来调整至新出现的界面。
2、在selenium进行定位的时候,会遇到frame结构,这个时候如果使用xpath直接进行定位会定位失败,所以这时候也需要进行切换
二、获取当前窗口句柄
1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。
2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。
3.获取当前页面的句柄:driver.current_window_handle
三、获取所有句柄
获取当前所有的句柄:window_handles
四、切换句柄
切换句柄:switch_to.window()
next_click.click()# 模拟点击下一页的时候,会出现一个新窗口或者新标签"""获取全部句柄"""
all_handles = self.driver.window_handles # 这个时候会生成一个新窗口或新标签页的句柄,代表这个窗口的模拟driver"""切换新页面"""
driver.switch_to.window(all_handles[1])# driver切换至最新生产的页面"""页面顺序从0开始"""
上面是切换句柄比较简单的方法,还有一种使用判断语句,小编在此给参考代码
# coding:utf-8from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://bj.ganji.com/")
h = driver.current_window_handle
print h # 打印首页句柄
driver.find_element_by_link_text("招聘求职").click()
all_h = driver.window_handles
print all_h # 打印所有的句柄#方法一:判断句柄,不等于首页就切换for i in all_h:if i != h:
driver.switch_to.window(i)print driver.title
# 方法二:获取list里面第二个直接切换
driver.switch_to.window(all_h[1])print driver.title
# 关闭新窗口
driver.close()# 切换到首页句柄
driver.switch_to.window(h)# 打印当前的titleprint driver.title
selenium(python+java)
五、遇到iframe结构
在selenium使用xpath进行定位的时候,会遇到frame结构,FRAME(框架)是Web上经常会看到的页面结构。此时需要进行跳转frame框架内,再执行定位。
self.driver.get("https://y.qq.com/")
self.driver.find_element(By.XPATH,'//span[@class="mod_top_login"]/a').click()"""定位到iframe"""
iframe = self.driver.find_element(By.XPATH,'//div[@class="login-box-bd__item current"]/iframe')"""跳转到结构内"""
self.driver.switch_to.frame(iframe)"""定位到第二个iframe"""
iframe_2 = self.driver.find_element(By.XPATH,'//div[@class="lay_login_form"]/iframe')"""继续跳转"""
self.driver.switch_to.frame(iframe_2)
locator =(By.LINK_TEXT,'密码登录')
WebDriverWait(self.driver,10).until(expected_conditions.element_to_be_clickable(locator))#显示等待,等待元素出现
self.driver.find_element(By.XPATH,'//div[@class="bottom hide"]/a[@id="switcher_plogin"]').click()#元素出现后进行下一步操作
版权归原作者 清如许qy 所有, 如有侵权,请联系我们删除。