先前配置的ChromeDriver服务仍在使用Grunt运行/运行Webdriver测试

时间:2017-02-24 19:36:34

标签: selenium reactjs gruntjs webdriver mocha

您好我正在尝试为使用selenium-webdriver的反应应用程序编写mocha测试。

我有几个问题,但帮助其中任何一个都会有所帮助,所以我可以继续前进。

  1. 首先,理想情况下,我想在不同的测试中共享相同的webdriver会话,因为我不关心它们运行的​​顺序。我只想加载网页一次,运行所有测试,然后关闭网页。这可能吗?我最初将我的前后案例放在一个描述之外的不同文件中,它工作正常......但是我无法在任何测试文件中访问该驱动程序的实例。

  2. 如果无法共享同一个会话,那么当我尝试运行两个specFiles时,如何解决下面的错误。

  3. 这是错误:

    $ grunt test-e2e
    Running "mochatest:e2e" (mochatest) task
    Running Mocha tests on files
    /Users/userName/Desktop/myReactApp/tests/e2e/testSpecOne.js
    /Users/userName/Desktop/myReactApp/tests/e2e/testSpecTwo.js
    
    Error: The previously configured ChromeDriver service is still running. You must shut it down before you may adjust its configuration.
        at Error (native)
        at Object.setDefaultService (/Users/userName/Desktop/myReactApp/node_modules/selenium-webdriver/chrome.js:264:11)
        at Object.<anonymous> (/Users/userName/Desktop/myReactApp/tests/e2e/testSpecTwo.js:8:8)
        at Module._compile (module.js:556:32)
        at loader (/Users/userName/Desktop/myReactApp/node_modules/babel-register/lib/node.js:144:5)
        at Object.require.extensions.(anonymous function) [as .js] (/Users/userName/Desktop/myReactApp/node_modules/babel-register/lib/node.js:154:7)
        at Module.load (module.js:473:32)
        at tryModuleLoad (module.js:432:12)
    

    典型的测试如下:

    import assert from 'assert';
    import test from 'selenium-webdriver/testing';
    import webdriver, {By, until} from 'selenium-webdriver';
    import chrome from 'selenium-webdriver/chrome';
    import chromedriver from 'chromedriver';
    import helpers from './helpers.js';
    
    chrome.setDefaultService(new chrome.ServiceBuilder(chromedriver.path).build());
    
    
    test.describe('Main page', () => {
    
      let driver = new webdriver
                        .Builder()
                        .withCapabilities(webdriver.Capabilities.chrome())
                        .build();
    
      test.before(() => {
          helpers.launchTheApp(driver, 'http://localhost:8000/myApp', 'elementOne', 10000);
      });
    
      test.after(() => {
        helpers.closeTheApp(driver);
      })
    
      test.it('Test some items appear', () => {
    
        helpers.checkIfElementIsPresent(driver, By.className, 'elementOne');
        helpers.checkIfElementIsPresent(driver, By.className, 'elementTwo');
        helpers.checkIfElementIsPresent(driver, By.className, 'elementThree');
    
       });
    });
    

    我正在使用grunt-mocha-test来运行这样配置的测试

    e2e:{
        options: {
            timeout: 3000000,
            ignoreLeaks: true,
            ui: 'bdd',
            run: true,
            log: true,
            reporter: typeof process.env.FUSION_BUILD_GENERATED === 'undefined' ? 'spec' : 'xunit-file',
            grep: grunt.option('grep')
        },
        src: ['tests/e2e/**/**/*Spec.js']
    }
    

1 个答案:

答案 0 :(得分:-1)

一种可能的解决方案是在隔离的环境中运行会话(例如在Docker容器中)。但是,尝试使用标准Selenium来实现这一点很复杂 - 您必须手动启动和停止容器或使用Ansible等基础结构自动化工具。这是一个名为Selenoid的新的Selenium兼容工具发挥作用的地方。只需在测试中请求两个单独的会话,它们将在Docker容器中并行运行。这为您提供了很大的灵活性。我的谈话:https://www.youtube.com/watch?v=TGjpc32my0Y