自动化测试常用脚本-窗口切换
# 句柄字典
handle_dic = {}
'''新开一个窗口'''
def open_new_window(self, url, window_name, t=4):
"""
:param url: 要访问的地址
:param t: 等待时间
:param window_name:新打开窗口的名称,在调用该方法前,这个参数是自己命名的,用于向switch_to_new_window()方法传参
:return:
"""
bef_windows = self.dr.window_handles # 获取当前所有窗口的句柄,dr是IE或Chrome或Firefox的浏览器驱动对象
js = 'window.open("%s");' % url # 使用JavaScript脚本构造地址
self.dr.execute_script(js) # 执行JavaScript脚本打开地址 url
self.switch_to_new_window(bef_windows, window_name) # 切换到新打开的窗口
self.dr.maximize_window() # 窗口最大化
sleep(t)
'''切换到新窗口'''
def switch_to_new_window(self, new_wndow, window_name=None):
"""获取当前所有窗口的句柄,若新窗口的句柄没在里面,则添加进去,然后切换到新窗口"""
"""
:param bef_wndows: 新窗口的句柄
:param window_name:新打开窗口的名称,默认值 None,与窗口句柄构造成一个字典
:return: 返回窗口句柄
"""
# 判断新窗口打开
WebDriverWait(self.dr, 15, 1).until(EC.new_window_is_opened(new_wndow)) # 显示等待,判断新的窗口是否已经打开
all_windows = self.dr.window_handles # 获取所有窗口的句柄
for handle in all_windows:
if handle not in list(self.handle_dict.values()): # 判断句柄在句柄列表中,若存在,则新打开窗口的名称,构造一个字典,一起存储在句柄字典 handle_dict 中
if window_name:
self.handle_dict[window_name] = handle
else:
self.handle_dict[handle] = handle # 若句柄不在句柄列表中,则以句柄的值当做名称,和它的值构造一个字典,一起存储在句柄字典 handle_dict 中
self.switch_window(handle) # 切换到新窗口
sleep(2)
return handle
'''切换窗口并显示在最前面'''
def switch_window(self, window_handle):
self.dr.switch_to.window(window_handle) # 切换到新窗口
self.dr.execute_script("window.focus()") # 将窗口显示在屏幕最前面
sleep(2)
您对以上内容有何建议或意见,请写下来告诉我,谢谢!!!