自动化测试常用脚本-窗口切换


# 句柄字典
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)

posted @ 2019-09-29 00:02  chenzy01  阅读(1278)  评论(0编辑  收藏  举报