2017-08-16 19 views
0

我在我的页面上有一个滑动菜单,它通过动画在一段时间之后出现。我想知道如何处理点击操作,而不使用browser.wait(condition, timeout),因为根据网络流量来获取远程数据库中的数据。量角器:等角度来完成动画

页面渲染可能需要很长时间,因此量角器触发超时错误。我一直在试图使用jQuery来等待所有转换和动画事件完成,但它仍然不起作用。

BasePage.prototype.clickMenuButton = function(menuName) { 

var link = element(by.linkText(menuName)); 

browser.ignoreSynchronization = true; 
browser.executeScript("jQuery('html > *').one('animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd', function(){})").then(
    function() { 
     link.click(); 
    }, 
    function (error) { console.log("Error : ", error); } 
); 
} 

有谁知道一种等待angularjs完成渲染和动画,而无需使用browser.wait和超时?

+0

'browser.wait'是为了等待,所以你为什么不想使用它? – Gunderson

回答

0

这是一个量角器与Angular JS“不兼容”。大多数人称这是一个错误,但没人确定。

但是,如果发生此问题,Angular和Protractor团队建议您修复$ timeout等待,以$ interval函数替换$ timeout函数。他们几乎是一样的,他们都达到了同样的目的。

$ interval函数修复量角器$超时问题。

Official documentation陈述对于任何连续轮询的事情(在Angular 1.2rc3中引入),您应该使用$ interval。

在这种情况下,$ timeout对于JavaScript自动化开发人员(量角器开发人员)来说对于前端开发人员(AngularJS开发人员)来说都不是一个好的选择。

另一种选择是在测试应用程序中使用超时,或者关闭浏览器同步。 这是我的ignoreSynchronization函数的例子。

browser.ignoreSynchronization = true; 
       browser.wait(toast.isPresent(), 3000).then(
        function(arr) { 
         if (arr) { 
          toast.getText().then(function(txt) { 
           // console.log(txt); 
           expect(txt).toContain(caption); 
          }); 
         } else { 
          toast.getText().then(function(txt) { 
           console.log('current toast: ' + txt); 
           console.log('modal not catched. see bug with $timeout \n ' + 
            caption + " \n" + 
            "==> Error! NOT PRESENT"); 
          }); 

         } 

        } 
       ); 
       browser.ignoreSynchronization = false; 

你也可以看看their official github issue tracker。这个页面指出,如果你有一个$ timeout函数,开发者不能改变这个(这看起来不太可能,并且看起来像一个糟糕的QA/dev关系),你应该使用ignoreSynchronization函数。

的主要结论是,为固定量角器$超时等待的角前端开发人员应该很容易与$间隔替换$超时。

让我知道它是否有帮助。