我正在将CucumberJS与Selenium-Webdriver结合使用来自动化我的测试用例。目前,我有多个功能文件及其各自的步定义文件。当我尝试运行测试用例时,它将引发错误:
错误:以前配置的ChromeDriver服务仍然存在 运行。您必须先将其关闭,然后才能调整其 组态。 在Object.setDefaultService(D:\ code \ egov-test-cases \ node_modules \ selenium-webdriver \ chrome.js:305:11) 在新世界(D:\ code \ egov-test-cases \ features \ support \ world.js:21:12) 在对象。 (D:\ code \ egov-test-cases \ features \ steps \ create_approver_remittance_master.js:15:13) 在Module._compile(module.js:653:30) 在Object.Module._extensions..js(module.js:664:10) 在Module.load(module.js:566:32) 在tryModuleLoad(module.js:506:12) 在Function.Module._load(module.js:498:3) 在Module.require(module.js:597:17) 在要求时(internal / module.js:11:18) 在supportCodePaths.forEach.codePath(D:\ code \ egov-test-cases \ node_modules \ cucumber \ lib \ cli \ index.js:142:42) 在Array.forEach() 在Cli.getSupportCodeLibrary(D:\ code \ egov-test-cases \ node_modules \ cucumber \ lib \ cli \ index.js:142:22) 在D:\ code \ egov-test-cases \ node_modules \ cucumber \ lib \ cli \ index.js:169:41 在Generator.next() 在asyncGeneratorStep(D:\ code \ egov-test-cases \ node_modules \ cucumber \ lib \ cli \ index.js:44:103) 错误命令失败,退出代码为1。 https://yarnpkg.com/en/docs/cli/run,以获取有关此文档的文档 命令。
由于我要自动化测试,因此我将以下代码用于自动将chrome放入world.js文件中,然后尝试从world.js导入驱动程序,但仍然会出现相同的错误。
class World {
constructor() {
const { setDefaultTimeout } = require('cucumber');
const webdriver = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const path = require('chromedriver').path;
const screen = {
width: 640,
height: 480
};
setDefaultTimeout(100 * 5000);
var service = new chrome.ServiceBuilder(path).build();
chrome.setDefaultService(service);
this.driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
}
}
答案 0 :(得分:0)
您可能需要做的是,在每次测试运行后都要终止浏览器,因为容器会被重用(因此,为什么浏览器可能已经在运行)。为此,您需要将一个hooks文件添加到您的支持文件夹中,并包括以下内容
After({}, async function(scenario) {
this.driver.quit();
}
});
有关更多信息,请查看文档https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/hooks.md
答案 1 :(得分:0)
我找到了解决问题的方法。实际上,驱动程序已多次初始化,这就是为什么它给了我上面的错误。我正在world.js文件中的World类中的构造函数中创建驱动程序。每当我参加World类的实例时,我都会创建一个新的驱动程序。我在类之外将驱动程序声明移为const driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build()
,并在world.js文件中将方法声明为initialize() { return driver; }
。我在我的步骤定义文件中将initialize()方法称为let world = new World(); let driver = world.initialize()
。现在我可以走了!