如何管理多个.js文件,以便在CucumberJS中使用它们的标签运行自动测试用例?

时间:2019-06-04 09:27:09

标签: javascript selenium-webdriver cucumberjs

我正在将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();
  }
}

2 个答案:

答案 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()。现在我可以走了!