Selenium自动化,在操作元素时,一定是基于某个窗口这个前提;我们时常在操作时会出现打开新窗口的情况;如点击新增按钮,打开了新增单据的新页面窗口,接下来要录入单据信息时,必须告诉框架切换到新窗口后,才能操作窗口内的元素;
甚至还需要在几个窗口之间来回切换,要做到这点,我们就需要提前获得各个窗口的句柄,从而判断当前在哪个窗口,接下来要去哪个窗口;
一、页面窗口切换用到的几个方法:
- driver.current_window_handle 获取当前窗口handle
- driver.window_handles 获取所有窗口的handle,返回list列表
- driver.switch_to.window(handle) 切换到对应的窗口
- driver.close() 关闭当前窗口
二、窗口切换几种形式:
- 通过句柄lists下标切换:
# 切换到新页面
def locateNewPage(drObject):drObject.switch_to.window(drObject.window_handles[-1])# 切换到首页面
def locateFirstPage(drObject):drObject.switch_to.window(drObject.window_handles[0])# 切换到倒数第二页面
def locateSecondPage(drObject):drObject.switch_to.window(drObject.window_handles[-2])
- 通过页面title切换:
# 根据title切换窗口 # 此封装原理,拿到当前所有页面的handle,然后循环根据当handle拿到页面title,和传入的title进行循环对比; def locateWindowTitle2(self, title):try:time.sleep(5)all_h = self.driver.window_handles # 获得所有窗口句柄# 遍历句柄,对比句柄的titlefor i in all_h:tl = self.driver.titleif tl == title:breakelse:self.driver.switch_to.window(i)except:raise AssertionError("页面切换失败!")else:pass