2017-04-12 5 views
0

誰かがこの問題を助けてくれることを願っています。私はセレンサーバを起動し、手動でPHPUnitのスクリプトを実行し、すべてがOKであることができPHPUnitのWindowsサーバー上のphpスクリプトがセレンを起動し、phpunitを呼び出す

- セレンサーバー - - PHP :私は、Windows Server 2008 R2上で、以下のインストールされています。彼らは素晴らしい仕事をしています。しかし、私はプロセス全体を自動化しようとしており、PHPスクリプトでこれをすべて行います。だから、私は生産している:

<?php 
    /* 
     Start the Selenium server with the chrome browser driver in a separate cmd window 
     /k = execute the cmd and then return to initial CMD prompt 
    */ 
echo "\nStart the Selenium Server and pass the Chrome browser as an argument"; 
    $startSeleniumWithChrome = 'start cmd /k java -Dwebdriver.chrome.driver="C:\Users\*\Automation\requiredFiles\chromedriver.exe" -jar "C:\Users\*\Automation\requiredFiles\selenium-server-standalone-3.0.1.jar"'; 
echo "\nBefore startSeleniumWithChrome"; 
    exec($startSeleniumWithChrome); 
echo "\nAfter startSeleniumWithChrome"; 

echo "\nBefore START phpunit"; 
    $executePhpunitCmd = 'start cmd /k phpunit -c phpunit.xml'; 
    exec($executePhpunitCmd); 
echo "\nAfter START phpunit"; 
?> 

私の問題: のexec($ startSeleniumWithChrome)。上記はハングアップしているようです。スクリプトはこの時点を過ぎて移動しません。どのようなスクリプトがハングアップしているのか誰に見てもらえますか? ありがとう コーナー

答えて

0

問題は、exec()は処理が終了するのを待ってから出力を返します。セレンはヘッドレスブラウザセッションを実行するので、終了せずにバックグラウンドで実行されます。

この機能を使用してプログラムを起動する場合は、プログラムをバックグラウンドで実行し続けるには、プログラムの出力をファイルまたは別の出力ストリームにリダイレクトする必要があります。そうしないと、プログラムの実行が終了するまでPHPが停止します。

Linuxでは、出力を/dev/nullにパイプするだけで済みます。これはあなたに即座にフィードバックを与えるだろうが、プロセスは、(出力は無視された状態で)、バックグラウンドで実行し続けます。

exec($startSeleniumWithChrome . ' /dev/null 2>&1 &'); 

あなたはこの試みることができるではない場合、私は、これはWindows上で動作するかどうかはわかりません。

exec($startSeleniumWithChrome . ' &'); 

また、実行中のプロセスから何らかの出力を取得する場合は、popen()/ pclose()を使用することもできます。

関連する問題