Selenium webdriver 如何在不创建webdriver实例的情况下创建webdriver承诺?
我需要在webdriverJS测试脚本中执行一些node require命令,因为这些命令不会进入webdriverJS命令队列,所以我将它们包装到Selenium webdriver 如何在不创建webdriver实例的情况下创建webdriver承诺?,selenium-webdriver,webdriverjs,Selenium Webdriver,Webdriverjs,我需要在webdriverJS测试脚本中执行一些node require命令,因为这些命令不会进入webdriverJS命令队列,所以我将它们包装到。然后()函数中(处理异步) e、 g var-webdriver=require('selenium-webdriver'); //创建webdriver实例,以便可以设置承诺链 var promise\u builder=new webdriver.builder().withCapabilities(webdriver.Capabilities
。然后()
函数中(处理异步)
e、 g
var-webdriver=require('selenium-webdriver');
//创建webdriver实例,以便可以设置承诺链
var promise\u builder=new webdriver.builder().withCapabilities(webdriver.Capabilities.chrome())。
build();
//将所有函数包装在webdriver承诺中,以便它们由webdriver管理
//命令队列
promise\u builder.sleep(0).then(function(){
//运行“非命令队列”命令
var测试=需要('./test_命令');
测试(助手、设置、webdriver、驱动程序);
}).然后(函数(){
//更多非webdriver命令
});
这里的问题(除了它不美观的事实)是浏览器实例被启动了——只是为了实现承诺链接
是否有更好的方法来创建初始承诺,例如webdriver api中用于创建承诺的静态方法?这似乎有效:
// create an instance of webdriver.promise.ControlFlow
var flow = webdriver.promise.controlFlow();
// use webdriver.promise.controlFlow#execute() to schedule statements into command queue
flow.execute(function() {
// Run "non-command-queue" commands
var tests = require('./test_commands');
tests(helpers, setup, webdriver, driver);
}).then(function(){
// more non-webdriver commands
});
对此可以找到解释,即
promise manager的核心是ControlFlow类。您可以使用webdriver.promise.controlFlow()获取此类的实例。任务使用execute()函数排队。任务总是在事件循环的下一个循环中执行,一旦队列中在它之前的任务(如果有)完成
我将使用
webdriver.promise.createFlow(回调)
启动一个新的控制流
所以你会有这样的东西:
webdriver.promise.createFlow(function() {
// Run "non-command-queue" commands
var tests = require('./test_commands');
tests(helpers, setup, webdriver, driver);
}).then(function(){
// more non-webdriver commands
});
文件:
更新
我现在倾向于@u velour\u fog描述的webdriver.promise.controlFlow.execute()
选项,因为在创建新的controlFlow时挂钩失败后,我会在中出错。猜猜看,创建一个新的流会让mocha异步功能变得混乱