我正在使用带有Selenium-Webdriver的CucumberJS来自动化我的测试用例。目前,我有多个特征文件和它们各自的步骤定义文件。当我试图运行测试用例时,它抛出了一个错误:
错误:以前配置的ChromeDriver服务仍在运行。您必须先将其关闭,然后才能调整其配置。在新的(D:\code\egov-test-cases\node_modules\selenium-webdriver\chrome.js:305:11) (D:\code\egov-test-cases\features\support\world.js:21:12) at Object的Object.setDefaultService (D:\code\egov-test-cases\node_modules\selenium-webdriver\chrome.js:305:11)。(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) at require (内部/模块:11:18) at supportCodePaths.forEach.codePath Module.require at Array.forEach () at Cli.getSupportCodeLibrary (D:\code\egov-test-cases\node_modules\cucumber\lib\cli\index.js:142:22) at D:\code\egov-test-cases\node_modules\cucumber\lib\cli\index.js:169:41 (D:\code\egov-test-cases\node_modules\cucumber\lib\cli\index.js:44:103)错误命令在Generator.next ()的asyncGeneratorStep失败,退出代码为% 1。有关此命令的文档,请访问https://yarnpkg.com/en/docs/cli/run。
因为我正在自动化测试,所以我已经将下面的自动化铬的代码放在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();
}
}
发布于 2019-06-06 03:36:47
您可能需要做的是在每次测试运行后终止浏览器,因为容器被重用(这就是为什么浏览器可能已经在运行)。为此,您需要在support文件夹中添加一个钩子文件,并包含以下内容
After({}, async function(scenario) {
this.driver.quit();
}
});
有关更多信息,请查看文档https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/hooks.md
发布于 2019-06-06 16:21:54
我找到了我的问题的解决方案。实际上,驱动程序被初始化了多次,这就是为什么它会给我上面的错误。我在world.js文件中的类World中的构造函数中创建了驱动程序。每次我获取类World的一个实例时,我都在创建一个新的驱动程序。我将驱动程序声明转移到类之外作为const driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build()
,并在world.js文件中创建了一个作为initialize() { return driver; }
的方法。我在步骤定义文件中以let world = new World(); let driver = world.initialize()
的形式调用initialize()方法。现在我可以开始了!
https://stackoverflow.com/questions/56441107
复制相似问题