Solution for Lead OPA test error ( add button clicked after cancel button )
改了Lead后遇到OPA的test failure:
问题的表现是我们的test code里点了cancel button之后,再点Add button,这行语句报错:在dialog里找不到这个期望的product
我会把这个问题的分析思路写到github上。
找不到item的原因是因为dialog根本就没有render-> dialog render是通过fragment.open实现的。
在引起OPA fail的上一行语句,add button会call Dialog.open,但是此时open没有真正执行,因为line 415就已经返回了。
[外链图片转存失败(img-YJw9CIAP-1568814912233)(https://user-images.githubusercontent.com/5669954/32261668-10062408-bf0b-11e7-8ccd-aec1510a3260.png)]
为什么之前Cancel button已经调用了Popup.close,但是 随后Open的时候isOpen仍然返回true?
Debug dialog的close方法就能得到答案:oPopup.close只会将状态置为CLOSING, 然后用延时操作将真正的close动作fnClose放在210毫秒之后执行:
[外链图片转存失败(img-Vy4zVc0z-1568814912234)(https://user-images.githubusercontent.com/5669954/32261671-10d4ea0e-bf0b-11e7-99f0-47f96cd17ad9.png)]
只有在210毫秒之后,popup的bOpen才会置为false,状态才会置为CLOSED. 但是我们随后的Add button click发生在这210毫秒之前,因此此时dialog的bOpen还为true,因此第二次Add button的执行并不能打开Dialog。
[外链图片转存失败(img-UI2ofEti-1568814912235)(https://user-images.githubusercontent.com/5669954/32261672-11094312-bf0b-11e7-846b-1d83198a59a0.png)]
Solution
第一种改法:
Product.js 做如下修改,这样每次点击add button会生成新的Dialog instance,避免了share同一个instance导致的问题。每次对oAddProductsFragment 赋上新的instance,之前的instance引用计数为0会被浏览器自动回收,不会出现内存泄露。我们Lead 代码里也没有任何地方需要显式通过”addProducts” id来引用这个dialog,所以这个改法可行。
[外链图片转存失败(img-CoZLlwqZ-1568814912235)(https://user-images.githubusercontent.com/5669954/32261673-113cd204-bf0b-11e7-8901-ac865e13fca1.png)]
我测试通过:
[外链图片转存失败(img-1IoENtgO-1568814912236)(https://user-images.githubusercontent.com/5669954/32261674-1171cdce-bf0b-11e7-892f-c1340ec8af75.png)]
第二种改法:
[外链图片转存失败(img-5mHhv4wI-1568814912236)(https://user-images.githubusercontent.com/5669954/32261660-0e92c2a2-bf0b-11e7-9719-e3c70c16c630.png)]
在open前面加上判断,抢先把210毫秒之后才会被修改的标志位提前由我们的application 代码自己改掉,这样之后的open能够成功。
但是这样做破坏了UI5的dialog.open和dialog.close的封装性,这些internal的属性bOpen和eOpenState UI5并不想让application touch,将来UI5升到新的版本随时可能修改,而且我也没试过Jenkins build会不会出错。所以这种做法技术可以但不能用在生产代码里。
第三种改法:
Debug dialog的close方法发现里面有个分支,如果传入的duration 为0,则真正做close的动作不通过animation来实现,而是立即执行fnClosed。
这种改法也能解决问题,但这样一来就相当于为了test 能通过而adapt了应用的UI behavior,感觉有点本末倒置。
[外链图片转存失败(img-1SkP7QOl-1568814912237)(https://user-images.githubusercontent.com/5669954/32261661-0ec950ce-bf0b-11e7-9d24-db9ed2440d1f.png)]
第四种改法:
以上三种方法都需要修改我们的应用代码。我在想有没有一种方法能够只修改OPA 代码,也能让测试通过。
Sent: Friday, 8 July, 2016 2:25 PM
UI5里的cancel点了之后的动画效果是用jQuery的animation实现的,代码里写死的动画效果的duration是210毫秒。
如果用这种解法,我还是能重用dialog fragment instance,只需要用dialog的API setDuration把close的animation设为0,这样close就没有动画效果了。
附件是延时为210毫秒和0毫秒的cancel 效果,大家看看肉眼能不能看出差别。
第四种解法的思路很简单,既然dialog的cancel是duration 210毫秒的动画效果,那么OPA代码里我只要保证OK button的点击是在这个cancel动画结束之后再执行就行了。用setTimeout将这个点击事件加到queue里,300毫秒后执行。
这种方法只用改OPA代码,可以作为最后的solution,现在OPA就能过了。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
Solution for Lead OPA test error ( add button clicked after cancel button )相关推荐
- why My Lead OPA test add Lead fails
When you perform OPA test for my lead application, test case "add Lead" via this url: It w ...
- HTML button 和 input type=“button”的区别 / input type=submit 和button的区别
HTML <button> 和 input type="button"的区别: 1. <button>标签里可以放文本图片等内容,与<input> ...
- html button onclick 列表,HTML Button.onclick 事件汇总
HTML Button.onclick 事件汇总 οnclick="document.all.WebBrowser.ExecWB( 1,1)" type="button& ...
- java button jbutton_java程序将Button改成JButton,该如何改?
(出现Accessrestriction:Thetype'JButton'isnotAPI(restrictiononrequiredlibrary'C:\ProgramFiles\Java\jre1 ...
- win32 直接申请button,后期修改button为圆角矩形窗口
因为这个问题,我改了一个多星期吧.直接申请的时候在create里面直接写,申请成功且运行以后,button是一个矩形,有菱角,我们大多数看到的矩形都是圆角的.那我们该如何做呢. 首先:很重要的是你要知 ...
- button 与 input type=button 的区别【2012/07/23】
<button>标签定义按钮.其内部可以放置内容(文本或者图像),这也是它与input创建按钮的不同之处. <button> 控件 与 <input type=" ...
- html的 button点击事件无效,InfoWindow里面加button,监听button点击事件无效 求解啊...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 点击infoWindw中的button按钮,无效果: 覆盖默认的dom结构 html, body, #container { width: 100%; h ...
- 解析button和input type=”button”的区别
一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...
- button组件 untiy_Unity自定义Button组件Transition
Unity自带的Button组件有三种不同的Transition(过渡)选项,分别是None, ColorTint, SpriteSwap, Animation.现在想自定义其他功能,比如在不同的状态 ...
最新文章
- 测试开发板与主机之间通过串口收发数据(uart.c/uart.h	)
- 赠书 | 熵的实际应用,赌场和金融圈最著名的一个数学公式
- 转如何在Sublime Text 2里增加编辑运行java功能
- kubernetes1.8.4 安装指南 -- 7. kubernetes node安装
- 基于时空相关属性模型的公交到站时间预测算法
- 华为向全球发布AI数据库、分布式存储,跑分轻松拿世界第一
- Android 学习笔记 Service服务与远程通信...(AIDL)
- 笨办法学python 3 48题_附录练习 8-10 笨办法学Python3
- 今天起改用mac的marsedit写博
- pg批量插入_PG语法解剖--基本sql语句用法入门
- MySQL下载安装与配置详细教程
- 2015年两化融合管理体系贯标试点企业
- 免费好用的虚拟服务器,六大免费好用的虚拟主机管理系统
- 计算机中级培训感言,计算机中级培训培训感言
- C语言二叉树非递归遍历详解,C语言实现二叉树的递归遍历和非递归遍历
- pinyin4j获取汉字正确的全拼和简拼(解决多音字问题)
- linux cat命令什么意思
- 专访杨翰深先生 | Mockplus企业版为什么能获得贵州银行的青睐?
- 流水线效率的计算公式计算机,[转载]生产效率计算公式
- 控制面板里卸载软件的入口注册表项