Selenium和异步JavaScript调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Selenium和异步JavaScript调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1784字,纯文字阅读大概需要3分钟。
内容图文
![Selenium和异步JavaScript调用](/upload/InfoBanner/zyjiaocheng/819/b3215c74bc0c4672b102372009e3b0e2.jpg)
我对Selenium和JavaScript回调函数都很陌生,我有一个很大的问题,我无法自己解决.我需要使用JavaScript的指定变量.如果我使用GoogleChrome打开页面并使用控制台输入我的JavaScript代码,我可以使用以下内容获取变量:
1. var myId;
2. getSomeIdStuffInfo("somestuff",function(docId)(myId = docId));
3. return myId;
如果我一步一步地输入这一行,我很容易得到正确的值myId.但是,当然,如果我尽可能快地执行三行,我得到null作为返回值,因为当我返回myId时回调函数没有完成. SOOOO ..如果我像这样使用硒:
JavascriptExecutor js = (JavascriptExecutor) driver;
String docInfoVal = (String) js.executeScript("" +
"var myId; " +
"getCurrentDocumentInfo(\"somestuff\"," +
"function(docId) {" +
"myId = docId;" +
"}" +
");" +
"return myId;");
结果我只得到null.所以…不知何故,我必须“等待”回调函数,直到我返回myId.我是否必须使用executeAsyncScript以及如何使用?我坐了几个小时,尝试了不同的东西,但我找不到答案.
在此先感谢您的帮助!
解决方法:
对于异步代码,您必须使用executeAsyncScript:
JavascriptExecutor js = (JavascriptExecutor) driver;
String docInfoVal = (String) js.executeAsyncScript("" +
"var done = arguments[0]; " +
"getCurrentDocumentInfo(\"somestuff\"," +
"function(docId) {" +
"done(docId);" +
"}" +
");");
使用executeAsyncScript调用的脚本将回调添加到传递给它的参数列表中.由于您没有向脚本传递任何参数,因此arguments [0]包含回调.您的代码必须在完成工作后调用此回调.您为回调赋予的值是executeAsyncScript返回的值.
在上面的代码中,我通过将其置于匿名函数中来拼写完成调用,但代码可以更简洁地编写为:
JavascriptExecutor js = (JavascriptExecutor) driver;
String docInfoVal = (String) js.executeAsyncScript("" +
"var done = arguments[0]; " +
"getCurrentDocumentInfo(\"somestuff\", done);");
甚至:
JavascriptExecutor js = (JavascriptExecutor) driver;
String docInfoVal = (String) js.executeAsyncScript(
"getCurrentDocumentInfo('somestuff', arguments[0]);");
内容总结
以上是互联网集市为您收集整理的Selenium和异步JavaScript调用全部内容,希望文章能够帮你解决Selenium和异步JavaScript调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。