2016-07-19 4 views
8

私の反応アプリをwebdriver.ioでテストするには、phantomjsを使って起動する必要があります。ReantJSアプリケーションをPhantomJS 2.1.1でレンダリングできないのはなぜですか?

最初は問題はwebdriver.ioだと思っていましたが、レンダリングしようとすると、PhantomJSが空白のページを返すことに気付きました。私はこのような起動

var page = require('webpage').create(); 
var args = require('system').args; 

var output_file = 'example.png', url = args[1]; 
t = Date.now(); 

var width = 1440; 
var height = 900; 
page.viewportSize = { width: width, height: height }; 
page.paperSize = { 
    format: 'A4', 
    orientation: 'landscape', 
    margin: { left: '1cm', right: '1cm', top: '1cm', bottom: '1cm' } 
}; 

console.log(url); 

page.onConsoleMessage = function(msg, lineNum, sourceId) { 
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")'); 
}; 

page.onLoadFinished = function (status) { 
    window.setTimeout(function() { 
     try { 
      page.evaluate(function (w, h) { 
       document.body.style.width = w + 'px'; 
       document.body.style.height = h + 'px'; 
       }, width, height); 
      t = Date.now() - t; 
      console.log('Loading ' + url); 
      console.log('Loading time ' + t + ' msec'); 
      page.clipRect = {top: 0, left: 0, width: width, height: height}; 
      page.render(output_file); 
     } 
     catch (e) { 
      status = e.message; 
     } 
     console.log(status + ';;' + output_file); 
     phantom.exit(); 
    }, 10000); 
}; 

try { 
    page.open(url); 
    console.log('loading'); 
} 
catch (ex) { 
    console.log(ex.message); 
    phantom.exit(); 
} 

は、いくつかのテストを行うために、私はこのJavaScriptファイルに書いたphantomjs test.js http://localhost:8080

をしかし、関係なく、私は何をすべきか、example.pngは常に空ではありません。

現在、React 0.14.7とphantomjs 2.1.1を使用しています。なぜ私は私のアプリをレンダリングできないのか誰かが考えているのですか?

PS:私は言及していないが、私は、クロムまたはFirefox

+0

良い質問です!私は今同じ問題を抱えています! –

+0

あなたの質問は、現在webdriver-ioとは関係ありません。 PhantomJSの一般的な問題が解決されたら、webdriver-ioに固有の質問をしてください。 –

答えて

7

おそらくPhantomJSでES6のサポートの欠如に関係していると何の問題もありません。ターゲットURLをロードする前に

ReferenceError: Can't find variable: Symbol

がページにシンボル1缶injectこのcore.jsをポリフィルするには:私はあなたのスクリプトに(!常に便利に)page.onError()コールバックを追加し、いくつかは、このエラーを取得するために、サンプルサイトを反応させるの開いた確認するには:

page.onInitialized = function() { 
    if(page.injectJs('core.js')){ 
     console.log("Polyfills loaded"); 
    }  
} 

これは外部サイトを開くためのものです。テスト中のサイトがあなたの開発の下にある場合(localhost urlが示唆するように)、おそらくthis answerに示すようにbabelを設定するだけで済みます。

+0

ありがとうございました。 page.onError()は私のアプリケーションでエラーを表示しませんでした。しかし、core.jsを注入することは仕事をするようです。 私はファントムシムとエス5シムを注入しようとしましたが、いずれも私の問題を解決しませんでした。 私はあなたの2番目のリンクに従い、私のバベルの構成を変更します;) –

+0

うまくいきました。 – Vaviloff

2

にPhantomJS 2.5.0 Betaをダウンロードできます。

これはES6をネイティブにサポートする更新されたQtWebKitエンジンを備えています。

+0

は私にとっては役に立たなかった。私はスクリーンショットをキャプチャしたときに空白のページを表示し続けます。 – jagzviruz

関連する問題