注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

我的UI自动化总结之失败用例跟踪  

来自雅婷Tracy   2013-01-31 17:06:54|  分类: 自动化测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    写过UI自动化的同学应该都碰到过这种情况,每天早晨查收邮件,看着一条条红红的failed,心里发凉不会是功能挂了吧,埋头看log,查找原因,发现很多情况下都是用例本身的原因,比如页面结构变动,导致xpath定位不到正确的位置,或者是功能优化导致用例逻辑变化,也可能是环境的问题等等,这些 原因只要我们修改用例就ok了,最要命的是找了半天也不知道用例为何失败,其实每一次用例失败都有原因,只是这些原因隐藏在小角落,往往被我们忽略,下面 我就列举下我遇到过的各种情况,希望对以后写UI自动化的同学有帮助。。。(以下情况都是基于Selenium框架的)
1.text
框中有默认值时,输入前最好先清空text
(1)
用例失败情况综述
添加子博客的时候,规定域名长度不能小于5个字符,在自动化用例中,添加域名为4个字符的子博客,添加成功,导致用例失败,发生概率:10%
我的UI自动化总结之失败用例跟踪 - 网易杭州QA - 网易杭州 QA Team
 

(2)原因分析

    在未添加域名的情况下,博客地址默认是name.lofter.com,在光标focus到博客地址框中的时候,name才会消失。根据开发的分析,是因为可能刚好是focus函数没执行完,自动化用例已经输入了域名,导致博客添加成功,如下图:

我的UI自动化总结之失败用例跟踪 - 网易杭州QA - 网易杭州 QA Team
 
(3)解决方案:修改自动化代码:在输入域名前先让光标定位到博客地址框,
public static void createSubBlog(BrowserEmulator be, String blogname,
            String blogadr, String vercode, int result)
            throws InterruptedException {
        be.open("http://www.lofter.com/newblog");
        be.type(子博_新建_博客名称输入框, blogname);
        be.getBrowser().focus(子博_新建_博客地址输入框);
        be.type(子博_新建_博客地址输入框, blogadr);
        be.type(子博_新建_验证码输入框, vercode);
        be.click(子博_新建_开通博客);

        // 验证
        if (result == 1) {
            be.expectElementExistOrNot(true, String.format(顶栏_子博博客名, blogname),
                    10000);
        }
        if (result == 0) {
            be.click(顶栏_管理);
            be.expectElementExistOrNot(false,
                    String.format(顶栏_子博博客名, blogname), 5000);
        }
    }

2.click和hover连串动作时,会有影响
(1)用例失败情况综述
     首页推荐日志,测试逻辑是:点击推荐按钮,推荐字样变成已推荐,且hover上去字样变成取消推荐。用例在运行的过程中,点击推荐后再去hover已推荐,字样不发生变化,即不会变成取消推荐,导致用例失败。
我的UI自动化总结之失败用例跟踪 - 网易杭州QA - 网易杭州 QA Team
(2)失败用例原因分析
    根据跟踪用例运行现场,发现click和hover连续操作,两者之间有影响,即click后并没有释放鼠标焦点即其实用例已经执行的hover动作,但是由于前面的click没有释放鼠标焦点,hover上去看到的还是已推荐,不会发生字样的变化。
(3)解决方案。click后释放鼠标焦点再去hover,最简单的方法,click后刷新页面。
3.存在不一定可见
(1)页面上明明存在的元素,报错:页面上不存在此元素

我的UI自动化总结之失败用例跟踪 - 网易杭州QA - 网易杭州 QA Team
 (2)失败用例原因分析
    当Xpath可以匹配到多个页面元素的时候,Selenium默认是抓取第一个的。代码中的xpath String sLikeButtonXpath = "//div[@id='main']//a[@title='喜欢']";不具有唯一性,定位到的是页面上所有匹配这个xpath的喜欢元素,其实取到的还是第一篇日志的“喜欢”元素,而这个喜欢元素在 html代码中被隐藏了,如下:
我的UI自动化总结之失败用例跟踪 - 网易杭州QA - 网易杭州 QA Team
所以执行我们用例中的函数:be.expectElementExistOrNot(true, sUnLikeButtonXpath, 5000);的时候,当运行到
new Wait() {
                    public boolean until() {
//                        return Browser.isVisible(XPath);
                        return browserCore.findElementByXPath(xPath).isDisplayed();
                   
                }.wait("*** 判断页面上是否可见指定元素 ***", timeout);
的时候,当然就会报错啦。
(3)解决方案:准备一个干净的测试账号或者是在BeforeClass里面做数据准备,先发一篇文章再去喜欢。
4.诡异情况
    在lofter的时候,遇到过这么一种情况,有个别用例在白天一直运行通过,晚上每天failed,查了好久,也不是功能上的bug,也非用例本身的原因,那就可能是环境的问题了,果然,在每天晚上重启服务器后,用例运行ok了,如果童鞋们以后也遇到过这种无论如何都找不到失败原因的用例,可以从环境着手哦。。。
   好了,就啰嗦这么多吧,学习这半年,感觉WebUI自动化真是千变万化,但是只要我们逻辑缜密,用例健壮,这些失败用例神马的都是浮云,如果童鞋们有好的经验,欢迎补充。。





  评论这张
 
阅读(1019)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016