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、遇到的问题:

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

UI自动化测试:异常标签页切换第1张

使用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 isNone:
                        print("" + "进入了空白页")
                        used_time +=frequcy
                        continuemy_log.info("切换至新标签页成功")
                    return
                except:
                    #空白页消失报错,等待一定的时间
                    used_time +=frequcy
                    continueused_time +=frequcy
    my_log.error("切换至新标签页失败!")

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

免责声明:文章转载自《UI自动化测试:异常标签页切换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WPF界面开发技巧大放送!DevExpress WPF格式化日期时间值cmd wevtutil 读取远程日志错误,Error:在没有配置的 DNS 服务器响应之后,名称 Server23.localdomain 的名称解析超时。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CI-持续集成(1)-软件工业“流水线”概述

CI-持续集成(1)-软件工业“流水线”概述 1   概述 持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误 [1]。 持续集成 相当于将传统工...

Robot Framework与Web界面自动化测试:简单例子

假设环境已经搭建好了。这里用RIDE( Robot Framework Test Data Editor)工具来编写用例。下面我们对Robot Framework简称rf。 我们先考虑下一个最基本的登录功能的测试用例。 一、自动化测试 与 人工测试 在开始编写用例之前,我们先来思考下自动化测试和人工测试的区别。对于web页面的人工测试,我们想下,如果去测试...

【Tempest】openstack自动化测试组件tempest及自动化测试工具nose

宝宝心里苦,但是宝宝只能在这穷乡僻壤说,下周又要开组会必须得干点事了。这次是做论文中的实验部分,主要利用到了openstack中的自动化测试组件Tempest,具体原因不细说了。 安装 分两种安装方法,一是直接使用devstack来安装openstack,这样的话tempest会自动由脚本安装,直接使用非常方便,但是问题是你要能成功运行devstack,反...

携程酒店DevOps测试实践

作者简介 王幸福,携程酒店研发部高级测试经理,负责无线自动化测试相关工作。在测试框架和平台研发、移动测试、DevOps等领域有着丰富的经验。 如今很多大型互联网公司、创新型企业都在积极地进行DevOps实践和落地。为什么DevOps如此受青睐? 我们该如何实施DevOps?DevOps中Dev代表开发,Ops代表运维,那么在这个崭新的流程体系中,QA又该...

Windows上实现iOS APP自动化测试:tidevice + WDA + airtest

在Windows上实现iOS APP自动化测试:tidevice + WDA + facebook-wda / appium中介绍了使用阿里开源的tidevice 和 facebook-wda实现在Windows上进行iOS APP自动化测试。本文介绍如何使用tidevice + WDA + airtest进行iOS APP自动化测试。 目录 环境准...

自动化测试学习路线

首先目前的话主要可以大的可以分为两个方向,要么是基于Java的自动化,要么是基于Python的自动化,很多做培训在培训的时候也是这样去划分,不过这个倒是不重要,归根结底都是为了解决问题的。 本文从3个面向去解答这个问题: 一、自动化测试的学习步骤; 二、自动化测试需要掌握的技术能力; 三、自动化测试的认识误区 首先要说的就是自动化测试的学习步骤 1. 做...