2017-02-24 10 views
8

こんにちは私は、selenium-webdriverを利用する私の反応アプリケーションのためのモカテストを書こうとしています。以前に設定されたChromeDriverサービスがまだ実行中/ GruntでWebdriverテストを実行中

私はいくつかの質問がありますが、どちらかが助けてもらうのを助けるために私は前進することができます。

  1. まず、理想的には、どのような順序で実行するか気にしないので、私は異なるテストで同じWebdriverセッションを共有したいと考えています。私は一度Webページをロードし、すべてのテストを実行してからWebページを閉じるだけです。これは可能ですか?私は当初、私の前と後のケースを記述の外に別のファイルに入れていましたが、うまくいきましたが、私のテストファイルのどれかでドライバのインスタンスにアクセスできませんでした。ここで

  2. 同じセッションを共有することができない場合は、どのように私は2 specFilesを実行しようとすると発生し、それ以下のエラーを解決することができます。..

は誤りです:

$ 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) 

A典型的なテストは次のようになります。私は、これらのテストconfのを実行するために作男・モカ・テストを使用しています

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'); 

    }); 
}); 

この

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

一つの可能​​な解決策のようigured(Docker容器、例えば)分離された環境で、あなたのセッションを実行することです。しかし、標準のSeleniumでこれを達成しようとすると複雑です。コンテナを手動で開始および停止するか、Ansibleのようなインフラストラクチャ自動化ツールを使用する必要があります。ここに、Selenoidと呼ばれる新しいSelenium互換ツールが登場します。テストで2つのセッションをリクエストするだけで、Dockerコンテナ内で並列に実行されます。これにより、多くの柔軟性が得られます。私の話:https://www.youtube.com/watch?v=TGjpc32my0Y

関連する問題