zoukankan      html  css  js  c++  java
  • UI自动化测试:异常标签页切换

    一、前言

      在进行web自动化测试或者App端webview自动化测试时,都会遇到切换标签页的场景,通常情况下使用WebDriverWait里面的一个方法,去等待一个新的标签页打开,然后切换至新的标签页。当有时出现异常,同时打开两个标签页的时候就不能使用WebDriverWait里面的等待方法。

    二、方式实现

      1、通常解决标签页切换的方法是:

    def switch_to_new_window(self, locator, timeout=30, poll_frequency=0.5):
        # 获取所有的窗口句柄
        handles = self.driver.window_handles
        # 点击元素,打开新标签页
        self.driver.find_element(*locator).click()
        # 等待新的标签页生成
        WebDriverWait(self.driver, timeout, poll_frequency=poll_frequency).until(EC.new_window_is_opened(handles))
        # 切换至新打开的标签页
        self.driver.switch_to.window(self.driver.window_handles[-1])

      2、遇到的问题:

    • 点击某个元素后,先后生成两个标签页;
    • 生成的两个标签页中,其中一个是空白页,无任何内容;
    • 空白页有时生成快,有时慢,有时生成后还消失;

      使用WebDriverWait里面的等待方法时,有时会切换至空白页面,而且有时切换至空白页后该页面消失了。面对这种异常情况,只能根据异常现象重新去封装一个切换方法。

    def switch_to_new_window_wait(self, locator, timeout=30, frequcy=0.5):
        # 获取所有的窗口句柄
        handles = self.driver.window_handles
        # 点击元素,打开新标签页
        self.driver.find_element(*locator).click()
        used_time = 0
        while used_time < timeout:
            # 点击元素后获取所有的窗口句柄
            old_handles = self.driver.window_handles
            time.sleep(frequcy)
            # 等待之后再次获取所有的窗口句柄
            new_handles = self.driver.window_handles
            # 比较等待前后窗口句柄是否相等
            if old_handles == new_handles:
                # 判断是否有新的标签页生成
                if handles[-1] != new_handles[-1]:
                    try:
                        self.driver.switch_to.window(new_handles[-1])
                        # 判断是否进入了空白页
                        if self.driver.current_url is None:
                            print("
    " + "进入了空白页")
                            used_time += frequcy
                            continue
                        my_log.info("切换至新标签页成功")
                        return
                    except:
                        # 空白页消失报错,等待一定的时间
                        used_time += frequcy
                        continue
            used_time += frequcy
        my_log.error("切换至新标签页失败!")

      上面的方法可以解决我遇到的标签页切换问题。

  • 相关阅读:
    C语言函数sscanf()的用法(转)
    GDB基本命令(整合)(转)
    单元命中率与字节命中率
    rpm安装找不到.so库文件(linux动态库连接的相关知识)(转)
    Linux下的tar压缩解压缩命令详解(转)
    Linux系统如何查看版本信息
    Linux /bin, /sbin, /usr/bin, /usr/sbin 区别(转)
    rsync问题-connection refused(111)、Unknown module
    转: 浅析Fusion-IO和Intel SSD
    转: 从0到1的电商架构应该怎么做?
  • 原文地址:https://www.cnblogs.com/zdx20/p/15206960.html
Copyright © 2011-2022 走看看