Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在量角器中等待元件稳定_Javascript_Node.js_Protractor_Automated Tests - Fatal编程技术网

Javascript 在量角器中等待元件稳定

Javascript 在量角器中等待元件稳定,javascript,node.js,protractor,automated-tests,Javascript,Node.js,Protractor,Automated Tests,是否有一种方法可以等待元素在量角器中稳定 如果元素至少在两个连续动画帧中保持相同的边界框,则认为该元素是稳定的 我之所以搜索它,是因为在我正在测试的web应用程序中,有一个web组件具有动画,因此除非动画结束,否则无法单击它们。从您的示例中,可以通过等待加载动画结束来解决此问题。乙二醇 const {ExpectedConditions} = require('protractor'); await browser.wait( ExpectedConditions.stalenessOf(

是否有一种方法可以等待元素在量角器中稳定

如果元素至少在两个连续动画帧中保持相同的边界框,则认为该元素是稳定的


我之所以搜索它,是因为在我正在测试的web应用程序中,有一个web组件具有动画,因此除非动画结束,否则无法单击它们。

从您的示例中,可以通过等待加载动画结束来解决此问题。乙二醇

const {ExpectedConditions} = require('protractor');

await browser.wait(
  ExpectedConditions.stalenessOf(this.$loadAnimationHomePage),
  10000,
  'error message'
);


或者您可以编写一个函数,等待元素具有相同的坐标(不在页面上移动)至少1秒,或者任何其他时间,我已经实现了一种方法,通过执行以下操作检查元素的稳定性:

/**
*等待元素稳定
*如果元素至少在两个连续动画帧中保持相同的边界框,则认为该元素是稳定的。
*/
异步isStable(){
等等(
this.compareElementPositions()
,这个。_过去的时间,
`元素${this.\u locator}在${this.\u elapsedTime}ms`)之后不稳定;
}
/** 
*isStable()的助手函数
*在两个不同的时间比较元素的位置,并在两个位置相互匹配时返回true。
*/
异步比较元素位置(){
让pos1=等待这个.webElement.getLocation();
等待浏览器。睡眠(200);
让pos2=等待这个.webElement.getLocation();
返回等待pos1===pos2;
}```
我希望这对将来遇到同样问题的人有所帮助。

你能添加一些代码吗?@StPaulis这里没有代码可添加。我实际上是在问有没有办法做到这一点。例如,当一个页面正在加载时,一个元素每次都在改变它的位置:在t0:(x=10,y=10)在t1:(x=40,y=20)在t2:(x=70,y=120)我想知道是否有一种方法可以等到这个元素到达它的最终位置,这样我就可以点击它。你可以在函数中使用重试策略(这应该是最简单的方法)(您可以使用Rxjs
interval
来实现此目的,您可以使用
takeUntil
创建管道)或在服务中使用
Subject
,当您的页面准备好时会通知您。@StPaulis您介意给我举个例子吗?类似的东西。尽管@Sergey的答案可能更适合您。