日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

        歡迎訪問 生活随笔!

        生活随笔

        當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

        编程问答

        Solution for Lead OPA test error ( add button clicked after cancel button )

        發(fā)布時間:2023/12/19 编程问答 32 豆豆
        生活随笔 收集整理的這篇文章主要介紹了 Solution for Lead OPA test error ( add button clicked after cancel button ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

        改了Lead后遇到OPA的test failure:

        問題的表現(xiàn)是我們的test code里點了cancel button之后,再點Add button,這行語句報錯:在dialog里找不到這個期望的product

        我會把這個問題的分析思路寫到github上。

        找不到item的原因是因為dialog根本就沒有render-> dialog render是通過fragment.open實現(xiàn)的。
        在引起OPA fail的上一行語句,add button會call Dialog.open,但是此時open沒有真正執(zhí)行,因為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只會將狀態(tài)置為CLOSING, 然后用延時操作將真正的close動作fnClose放在210毫秒之后執(zhí)行:

        [外鏈圖片轉存失敗(img-Vy4zVc0z-1568814912234)(https://user-images.githubusercontent.com/5669954/32261671-10d4ea0e-bf0b-11e7-99f0-47f96cd17ad9.png)]
        只有在210毫秒之后,popup的bOpen才會置為false,狀態(tài)才會置為CLOSED. 但是我們隨后的Add button click發(fā)生在這210毫秒之前,因此此時dialog的bOpen還為true,因此第二次Add button的執(zhí)行并不能打開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引用計數(shù)為0會被瀏覽器自動回收,不會出現(xiàn)內存泄露。我們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方法發(fā)現(xiàn)里面有個分支,如果傳入的duration 為0,則真正做close的動作不通過animation來實現(xiàn),而是立即執(zhí)行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實現(xiàn)的,代碼里寫死的動畫效果的duration是210毫秒。

        如果用這種解法,我還是能重用dialog fragment instance,只需要用dialog的API setDuration把close的animation設為0,這樣close就沒有動畫效果了。

        附件是延時為210毫秒和0毫秒的cancel 效果,大家看看肉眼能不能看出差別。
        第四種解法的思路很簡單,既然dialog的cancel是duration 210毫秒的動畫效果,那么OPA代碼里我只要保證OK button的點擊是在這個cancel動畫結束之后再執(zhí)行就行了。用setTimeout將這個點擊事件加到queue里,300毫秒后執(zhí)行。

        這種方法只用改OPA代碼,可以作為最后的solution,現(xiàn)在OPA就能過了。

        要獲取更多Jerry的原創(chuàng)文章,請關注公眾號"汪子熙":

        總結

        以上是生活随笔為你收集整理的Solution for Lead OPA test error ( add button clicked after cancel button )的全部內容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。