2016-06-22 21 views
1

私はドキュメントを読んでおり、チュートリアルのステップバイステップを踏んでおり、私はそのアプリケーションを実行することしかできませんでした。セレンのwebdriverを使ってElectronアプリをテストする方法

私はそれを動作させることができないchromedriverとの接続、私はテストを起動し、私はこれを取得簡単なボタンをクリックしようとすると:

Error: ChromeDriver did not start within 5000ms at Error (native)
at node_modules/spectron/lib/chrome-driver.js:58:25 at Request._callback (node_modules/spectron/lib/chrome-driver.js:116:45) at Request.self.callback (node_modules/spectron/node_modules/request/request.js:200:22) at Request. (node_modules/spectron/node_modules/request/request.js:1067:10) at IncomingMessage. (node_modules/spectron/node_modules/request/request.js:988:12) at endReadableNT (_stream_readable.js:913:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickCallback (internal/process/next_tick.js:98:9)

私のコード:

"use strict"; 
require("co-mocha"); 
var Application = require('spectron').Application; 
var assert = require('assert'); 

const webdriver = require('selenium-webdriver'); 

const driver = new webdriver.Builder() 
    .usingServer('http://127.0.0.1:9515') 
    .withCapabilities({ 
    chromeOptions: { 
     binary: "./appPath/app" 
    } 
    }) 
    .forBrowser('electron') 
    .build(); 

describe('Application launch', function() { 
    this.timeout(100000); 
    var app; 
    beforeEach(function() { 
    app = new Application({ 
     path: "./appPath/app" 
    }); 
    return app.start(); 
    }); 

    afterEach(function() { 
    if (app && app.isRunning()) { 
     return app.stop(); 
    } 
    }); 

    it('click a button', function*() { 
    yield driver.sleep(5000); 
    yield driver.findElement(webdriver.By.css(".classSelector")).click(); 
    }); 
}); 

ありがとう、ごめんなさい。

答えて

0

最初に、Spectron(WebdriverIOのラッパー)とWebdriverJS(Selenium-Webdriverの一部)は、2つの異なるフレームワークです。これらのフレームワークのうちの1つをテストに使用するだけです。

あなたがWebdriverJSを使用している場合は、あなたは、このステップで./node_modules/.bin/chromedriverを実行する必要があります:http://electron.atom.io/docs/tutorial/using-selenium-and-webdriver/#start-chromedriver

0

私は、端末内のプロキシ例外を追加することにより、作業ChromeDriverを得ることができます。

export {no_proxy,NO_PROXY}="127.0.0.1" 
0

まず、「ChromeDriverが5000ms以内に開始しなかった」という同じエラーが発生しました。

私は今、私は別のエラー取得しています

set no_proxy,NO_PROXY="127.0.0.1,localhost" 

でno_proxyの設定

1) context local project "before all" hook: 
    Error: Timeout of 40000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. 

を奇妙なことは、それは私のマシン上で動作しないということですが、他のものの上にこれらのテストを実行します元気? ChromeDriverのプロセスがタスクマネージャ内で開始されていることがわかります。

+0

Chromedriverは、パスにスペースが含まれている場合は起動に失敗しました!これがあなたに当てはまるかどうかを確認してください – MatthiasSommer

0

Spectronをお勧めします。あなたの電子アプリをテストする苦痛の少ない方法です。私の意見では、完璧な組み合わせは、同時テストを可能にするAvaテストフレームワークでそれを使用しています。

async & awaitもまた大きな勝利です。テストケースをきれいにすることができます。

、あなたはシリアル起こる必要がテストを持っている場合にも、あなたは参照用test.serial

test.serial('login as new user', async t => { 
 
    let app = t.context.app 
 
    app = await loginNewUser(app) 
 
    await util.screenshotCreateOrCompare(app, t, 'new-user-mission-view-empty') 
 
}) 
 
    
 
test.serial('Can Navigate to Preference Page', async t => { 
 
    let app = t.context.app 
 
    await app.client.click('[data-test="preference-button"]') 
 
    await util.screenshotCreateOrCompare(app, t, 'new-user-preference-page-empty') 
 
})

だけを使用することができます。私のヘルパーテストケース。

test.before(async t => { 
 
    app = util.createApp() 
 
    app = await util.waitForLoad(app, t) 
 
}) 
 

 
test.beforeEach(async t => { 
 
    t.context.app = app 
 
}) 
 

 
test.afterEach(async t => { 
 
    console.log('test complete') 
 
}) 
 
// CleanUp 
 
test.after.always(async t => { 
 
    // This runs after each test and other test hooks, even if they 
 
failed 
 
    await app.client.localStorage('DELETE', 'user') 
 
    console.log('delete all files') 
 
    const clean = await exec('rm -rf /tmp/DesktopTest') 
 
    await clean.stdout.on('data', data => { 
 
    console.log(util.format('clean', data)) 
 
    }) 
 
    await app.client.close() 
 
    await app.stop() 
 
})

utilの機能、

// Returns a promise that resolves to a Spectron Application once the app has loaded. 
    // Takes a Ava test. Makes some basic assertions to verify that the app loaded correctly. 
    function createApp (t) { 
     return new Application({ 
     path: path.join(__dirname, '..', 'node_modules', '.bin', 
      'electron' + (process.platform === 'win32' ? '.cmd' : '')), 

     // args: ['-r', path.join(__dirname, 'mocks.js'), path.join(__dirname, '..')], 
     env: {NODE_ENV: 'test'}, 
     waitTimeout: 10e3 
     }) 
    } 
関連する問題