栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

了解Selenium中的执行异步脚本

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

了解Selenium中的执行异步脚本

这是对这两个API
的引用(这是Javadoc,但是功能相同),这是摘录,突出了两者的区别

[executeAsyncscript]在当前选定的框架或窗口的上下文中执行异步Javascript。与执行同步Javascript不同,使用此方法执行的脚本必须通过调用提供的回调来显式表示已完成脚本。此回调始终作为最后一个参数注入执行的函数中。

基本上,execSync会阻止硒浏览器正在执行的其他操作,而execAsync不会阻止并在

callback
完成时调用a 。


由于您已经使用过量角器,因此我将以此为例。量角器用途

executeAsyncscript
get
waitForAngular

在中

waitForAngular
,量角器需要等到angular宣布所有事件解决为止。您不能使用它,
executescript
因为那需要在最后返回一个值(尽管我猜您可以实现一个忙循环,不断轮询角度直到完成)。它的工作方式是量角器提供一个回调,所有事件解决后,Angular会调用该回调,并且需要executeAsyncscript。在这里编码

在中

get
,量角器需要轮询页面,直到
window.angular
Angular设置了全局值为止。一种解决方法是
driver.wait(function(){driver.executescript('return window.angular')},5000)
,但是这种方式,量角器每隔几毫秒就会在浏览器上撞击一次。相反,我们这样做(简化):

functions.testForAngular = function(attempts, callback) {  var check = function(n) {    if (window.angular) {      callback('good');    } else if (n < 1) {      callback('timedout');    } else {      setTimeout(function() {check(n - 1);}, 1000);    }  };  check(attempts);};

再次,这是

executeAsyncscript
因为我们没有立即返回值。在这里编码


总而言之,

executeAsyncscript
当您关心调用脚本中的返回值时使用,但是该返回值将不会立即可用。如果您无法轮询结果,但必须使用回调或promise(必须将其转换为自己的回调)来获取结果,则这尤其必要。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369260.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号