2

私は最近、Selenium を使い始めました。作業を簡単にするために、ノードを使用してスクリプトを実行し、テストを視覚的に監視できるようにしました。今の私の課題は、ヘッドレス テストとして実行できるように変換することです。残念ながら、私が見つけたほとんどのリソースは、phantomjs と ghostdriver を Java または Python で使用する方法しか扱っていません。上司は、Java や Python を使用せずに phantomjs を使用してテストを実行するように求めています。最終的に、これらのテストは、GUI なしでサーバー上の Linux VM を介してリモートで実行されます。現在、私は Mac OS X 10.8 を使用してテストしていますが、目標を達成するためにまだ多くの橋を渡る必要があります。

私の最も重要な質問は、まず、Java や Python を使用せずに、ポートを介して phantomjs からスクリプトを実行することは可能ですか? 出くわすことができる限り多くのリソースを調べるのに何時間も費やしましたが、解決策はありません。

もしそうなら、ヘッドレスで実行するようにテストを適切に初期化するにはどうすればよいですか? これが、機能テストの開始をどのようにスクリプト化したかです。機能をfirefoxからphantomjsに適切に切り替え、適切なポートを使用してヘッドレスで実行できるようにしたい. テストの残りの部分では、特定のサイトに移動し、ウィジェットを介してログインし、さらにその領域に移動します。これを機能させた後に操作するテストをさらに作成します。

var webdriver = require('selenium-webdriver'),
SeleniumServer = require('selenium-webdriver/remote').SeleniumServer;

var server = new SeleniumServer("Path/selenium-server-standalone-2.39.0.jar", {
port: 8910
});

server.start();

var driver = new webdriver.Builder().
usingServer(server.address()).
withCapabilities(webdriver.Capabilities.firefox()).
build();

テストは完全に機能しますが、私はこれに慣れていないので、見落としているばかげたことがあるかもしれません。ファントムをヘッドレスで実行するには、どのような調整を行うべきか教えてください。機能をphantomjsに切り替えた後、ノードを使用してスクリプトを実行しようとすると、生成されます

"/Selenium/node_modules/selenium-webdriver/phantomjs.js:22
LogLevel = webdriver.logging.LevelName,
                            ^
TypeError: Cannot read property 'LevelName' of undefined
 at Object.<anonymous> (/Selenium/node_modules/selenium-webdriver/phantomjs.js:22:33)

これは調整できない読み取り専用ファイルです。「LogLevel」または「LevelName」を適切な対応する値 (DEBUG など) に定義しようとしても無駄でした。

そして、それをphantomjs自体で実行すると、次のようになります-

"Error: Cannot find module 'path'

 phantomjs://bootstrap.js:289
 phantomjs://bootstrap.js:254 in require"

(It also lists module 'http') -- (and various undefined function errors)

その例では、Selenium、phantomjs、ghostdriver のファイルをどこに置くべきかを適切に整理していなかったように感じます。サーバーのセットアップ部分も削除し、代わりにこれを最初に実行し、次にスクリプトを個別に実行しました。

phantomjs --webdriver=8910 

しかし、それは同じ結果をもたらしました。これらの問題を修正するための私の調査ではすべて、Java と Python の手順が判明しましたが、Javascript 自体はわかりませんでした。多くのうさぎの穴を追いかけるよりも、より良い心に相談するのが賢明だと思いました.

あなたが私よりもよく知っていて、Java や Python なしでこれを試みるのは無益であることを知っているなら、私に知らせてください。問題が私のスクリプト内のどこにあるかを知っていて、修正を提案できる場合は、お知らせください。問題の性質を適切に説明できていることを願っています。さらに情報が必要な場合は、できる限りご提供できるようにいたします。

これは私が Javascript を使用する 2 週目なので、私が初歩的なエラーを起こしていると思われる場合は、その通りかもしれません。スクリプトは、selenium webdriver を使用してノードを介して機能することに注意してください。

お時間をいただきありがとうございました!!! 〜アイザック

4

1 に答える 1

2

これは少しトリッキーでしたが、ここに私がまとめた解決策があります:

var webdriver = require('selenium-webdriver'),
    SeleniumServer = require('selenium-webdriver/remote').SeleniumServer,
    server = new SeleniumServer('/path/to/selenium/selenium-server-standalone-2.41.0.jar', {
        port: 4444

    }),
    capabilities = webdriver.Capabilities.phantomjs();
    capabilities.set('phantomjs.binary.path', 'path/to/phantom/bin/phantomjs');

var promise = server.start().then(function() {
    var client = new webdriver.Builder().
    usingServer(server.address()).withCapabilities(
       capabilities
    ).build();
    return {
        'client': client,
        'server': server
    };
}, function(err) {
    console.log('error starting server', err);
});

その後、selenium の mocha 互換テスト フレームワークで promise を使用して、サーバーが起動するまでテストを保持できます。

ナビゲーションがページの右端にあることがわかったら、ドキュメントは本当に役に立ちました。URL は次のとおりです: http://selenium.googlecode.com/git/docs/api/javascript/module_selenium-webdriver.htmlでは、ここ で立ち往生することになります。selenium-webdriver を静かにします。

于 2014-04-06T18:49:14.940 に答える