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("切换至新标签页失败!")

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

原文地址:https://www.cnblogs.com/zdx20/p/15206960.html