Javascript 毕竟挂钩错误-';这';在使用cucumber js和selenium时,不是指我的世界构造函数
在测试结束时(使用cucumber js和selenium)试图关闭浏览器时,我遇到了“AfterAll hook errored”这并不像在我的step.js文件中那样是指世界 这是我的hooks.js文件:Javascript 毕竟挂钩错误-';这';在使用cucumber js和selenium时,不是指我的世界构造函数,javascript,node.js,selenium-webdriver,bdd,cucumberjs,Javascript,Node.js,Selenium Webdriver,Bdd,Cucumberjs,在测试结束时(使用cucumber js和selenium)试图关闭浏览器时,我遇到了“AfterAll hook errored”这并不像在我的step.js文件中那样是指世界 这是我的hooks.js文件: const { AfterAll, Before } = require("cucumber"); AfterAll(async function() { await this.browser.close(); }); 这是我的world.js文件: const driver =
const { AfterAll, Before } = require("cucumber");
AfterAll(async function() {
await this.browser.close();
});
这是我的world.js文件:
const driver = require("selenium-webdriver");
require("chromedriver");
const browser = new driver.Builder().forBrowser("chrome").build();
const { setWorldConstructor, setDefaultTimeout } = require("cucumber");
class CustomWorld {
constructor() {
this.driver = driver;
this.browser = browser;
this.setDefaultTimeout = setDefaultTimeout(60 * 1000);
}
}
setWorldConstructor(CustomWorld);
在一个JS闭包
中,这个
被隐式地设置为外部上下文是什么(通常是全局的)。您需要将函数.bind()
绑定到此或使用fat数组表示法:
AfterAll(async () => {
await this.browser.close();
});
根据:
与Before/After不同,这些方法不会有这样的世界实例。这是因为每个场景都有自己的世界实例,这些钩子在所有场景之前/之后运行
这很不幸,因为我也遇到过这种情况。到目前为止,我的解决方法是在之前
和之后
钩子可用的范围内声明变量,然后将其导入并分配给其文件中的世界对象。我不使用Cucumber,但在其他框架中,*所有的
块都有不同的此
上下文而不是测试块,因为测试上下文是为每个测试创建的,而*所有的
都只计算一次。参考资料证实了这一点。对于每一个场景,世界都是一个孤立的上下文,暴露在这样的钩子和步骤中。您可能应该为每个测试设置并关闭浏览器
。