如何提升WebUI自动化的稳定性

一、导致UI自动化不稳定的因素

1.web页面的多变
在自动化的实际应用场景中,经常性会碰到一类问题,UI界面经常性的变动,导致页面元素对象的维护成本大大增加。

2.页面隐藏元素
受前端影响,页面元素的定位在采用相对定位时可能会定位到隐藏元素,导致脚本的不稳定性

3.页面元素加载不稳定
受机器本身及网络状态影响,UI界面的响应时间存在不稳定

4.系统业务复杂
相比繁杂的业务场景,重复简单的业务参加肯定更适于参与自动化测试。随着业务复杂度的提升,脚本的复杂程度也随之提升,中间的业务逻辑更容易出现问题。

5.AJAX请求问题
ajax请求会导致三种情况的问题:元素没有加载出来,不在DOM结构里面;元素不可见,在DOM结构里面;元素可见,可点击,但是页面上其他位置还没完全加载出来,点击这个元素之后一点反应都没有,下一步操作就会报错。

6.环境测试数据准备问题
自动化测试其实就是将功能操作通过脚本自动执行起来,同样会涉及测试数据清理,测试数据准备的问题

二、解决问题的各种方法

1.从自动化框架解决问题

1.1 设置显示等待

重写selenium的底层接口,加入显示等待,设置等待条件及异常处理

WebDriverWait(driver,timeout,poll_frequency=0.3,ignored_exceptions=None)
driver:浏览器驱动
timeout:最长超过时间,默认以秒为单位
poll_frequency:监测的时间间隔,默认为0.3秒
ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
1.2 等待页面加载稳定

重写selenium的底层接口,定位元素前需要先等待页面加载稳定,页面加载稳定的判断条件为"页面源码在限定时间内不在发生变化"

begin = int(time.time())
source = driver.page_source
 while True:
     time.sleep(0.3)
     nowsource = driver.page_source
     if source == nowsource:
         break
     else:
         now = int(time.time())
         if now - begin > 3:
             break
     source = nowsource
try:
    WebDriverWait(self.driver, outtime).until(
        lambda driver: driver.execute_script('return document.readyState') == 'complete')
except exceptions.TimeoutException:
    pass
1.3 过滤隐藏元素

重写selenium的底层接口,在selenium判断的基础上,过滤掉页面特殊的隐藏元素,增强脚本容错性

try:
     if not element.is_displayed():
         return False
     size = element.size
     if not int(size['height']) or not int(size['width']):
         return False
     loc = element.location
     if int(loc['x']) < -9000 or int(loc['y']) < -9000:
         return False
     if not element.is_enabled():
         return False
 except:
     return False
 return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值