1

私はRubyとWatirを初めて使用します。これが私の問題です...

必要なテスト データを含む MySQL DB があります。私は過去にこのデータを使って多くのことを行ってきたので、このデータにアクセスし、データを使用中/使用中/不良/その他としてマークするための PHP ツールのライブラリ全体を持っています。 PHP フレームワーク。したがって、Watir スクリプトのラッパーとして PHP フレームワークを使用したいと考えています。たとえば、PHP を使用して DB からテスト ユーザーのログイン データを取得し、処理のために Ruby スクリプトに渡します。

私は現在、作業/テストが必要なjavascriptを使用したサイトを持っていますが、PHPとcURLはこれに対処できません。したがって、これらのサイトでは、Ubuntu 10.10 (Maverick、サーバーではなくデスクトップ) で Watir-WebDriver を使用しています。私が抱えている問題は、すべての Watir コードで Ruby スクリプトの PHP の shell_exec を使用することです。

PHP shell_exec がファイルを実行しています。表示されているファイルにいくつかの puts 行があるため、それを見ることができます。ただし、コードは行で失敗しているようです

ff = Watir::Browser.new :firefox

PHP からエラーが発生しません。

PHP の行は次のとおりです。

echo shell_exec('ruby /var/www/watir_test.rb');

次の行を使用してターミナル ウィンドウから呼び出すと、Ruby スクリプトは正常に動作します。

ruby /var/www/watir_test.rb

コマンドラインからでは機能しましたが、ブラウザーからは機能しなかったため、これはパーミッションの問題であると当初は予想していました。ただし、テスト用に提供したハードコードされたデータを返すのに十分なほどファイルを呼び出すことができるため、Ruby ファイルのアクセス許可は問題ではないようです。www-data ユーザーから Firefox ウィンドウを開く際にパーミッションの問題が発生する可能性はありますか?

私が走るとき

ruby -d -v /var/www/watir_test.rb

私は得る:

{:extension=>:webdriver} {"app.update.enabled"=>"false"} {"browser.link.open_newwindow"=>"2"} {"browser.shell.checkDefaultBrowser"=>"false"} {"extensions.update.enabled"=>"false"} {"security.warn_entering_secure.show_once"=>"false"} {"webdriver_assume_untrusted_issuer"=>true} {"startup.homepage_welcome_url"=>"\"about:blank\""} {"browser.tabs.warnOnClose"=>"false"} {"extensions.update.notifyUser"=>"false"} {"toolkit.networkmanager.disable"=>"true"} {"security.warn_entering_weak.show_once"=>"false"} {"webdriver_firefox_port"=>"7055"} {"browser.download.manager.showWhenStarting"=>"false"} {"extensions.logging.enabled"=>"true"} {"network.manage-offline-status"=>"false"} {"network.http.max-connections-per-server"=>"10"} {"security.warn_submit_insecure"=>"false"} {"security.warn_entering_weak"=>"false"} {"security.warn_leaving_secure"=>"false"} {"prompts.tab_modal.enabled"=>"false"} {"security.warn_viewing_mixed.show_once"=>"false"} {"dom.max_script_run_time"=>"30"} {"webdriver_accept_untrusted_certs"=>true} {"browser.safebrowsing.enabled"=>"false"} {"security.warn_leaving_secure.show_once"=>"false"} {"signon.rememberSignons"=>"false"} {"javascript.options.showInConsole"=>"true"} {"app.update.auto"=>"false"} {"browser.EULA.3.accepted"=>"true"} {"browser.tabs.warnOnOpen"=>"false"} {"dom.disable_open_during_load"=>"false"} {"network.http.phishy-userpass-length"=>"255"} {"security.warn_entering_secure"=>"false"} {"browser.startup.homepage"=>"\"about:blank\""} {"browser.EULA.override"=>"true"} {"browser.dom.window.dump.enabled"=>"true"} {"browser.startup.page"=>"0"} {"browser.link.open_external"=>"2"} {"browser.search.update"=>"false"} {"browser.sessionstore.resume_from_crash"=>"false"} {"security.warn_viewing_mixed"=>"false"} {"dom.report_all_js_exceptions"=>"true"} {"webdriver_enable_native_events"=>false} {"devtools.errorconsole.enabled"=>"true"}

PHP で shell_exec を適切に実行するにはどうすればよいですか? スクリプトは機能し、最初のテストは firewatir を使用して実行されました (shell_exec は正常に実行されました) が、実際には FireWatir の代わりに Watir-WebDriver を使用したいと考えています。 Firefox のみを実行できます。

ありがとうゲイブ

これが私の「ブラウザの作成」コードです:

# Include the RubyGems file
require 'rubygems'

# Include the Watir-WebDriver file. 
require 'watir-webdriver'


# Create the necessary objects
def create_browser(proxy)
    # Setup the proper Firefox Profile
    profile = Selenium::WebDriver::Firefox::Profile.new
    profile.proxy = Selenium::WebDriver::Proxy.new :http => proxy

    puts "<br>Using proxy " + proxy + "..."


    #ff=FireWatir::Firefox.new :profile => profile
    ff = Watir::Browser.new :firefox #, :profile => profile

    puts "<br>Firefox ready..."

    return ff
end
4

5 に答える 5

3

サーバーがヘッドレスの場合、Firefox が機能するようにヘッドレス gem をインストールする必要があります。

require 'watir-webdriver'
require 'headless'
headless = Headless.new
headless.start
b = Watir::Browser.start 'www.google.com'
puts b.title
b.close
headless.destroy

参照: http://watirwebdriver.com/headless/

于 2011-09-01T04:33:16.573 に答える
2

以下の2行のコードをPHPスクリプトの一番上に配置します。この結果、ブラウザでPHPページを参照すると、権限エラーを含め、エラーが正確に表示されます。

ini_set("display_errors",1); 
error_reporting(E_ALL);
于 2011-11-15T22:44:11.717 に答える
2

これはパーミッションの問題ではなく、PHP スクリプトはサーバー (通常は apache) のパーミッションで実行されます。

asudo wwwを実行してスクリプトを実行してrbから、サーバー ユーザーで ruby​​ を実行するときに問題があるかどうかを確認できます。

于 2011-08-31T23:18:18.990 に答える
1

そのため、Firefoxの最近のアップデートにより、Watirのサポートが終了しました(覚えていれば、JSSHのアップデートはありません)。その結果、Selenium::WebDriver用に持っていた小さなコードを書き直しました。しかし、私はそれが特に関連性があるとは思っていません(関連性がある場合に含まれていますが、私はそれを知りません)。

私の究極の解決策は、phpseclibを使用することでした。これにより、SSH2PHPクラスを介してマシンにSSHで接続できます。通常のユーザー名(通常のパスワードを使用)でログインすると、ヘッドレスバージョンのスクリプトを問題なく起動できました。これが引き起こす唯一の本当の問題は、ログファイルとスクリーンショットを介して行われているすべてを表示する必要があるということですが、それは私が思いついた解決策に関係なく真実である可能性があります。

phpseclibには、サーバーのユーザー名とパスワードが必要です(少なくとも、何らかの形式の公開秘密鍵ペアを設定するまで)。したがって、ログインデータを使用してファイルへの読み取りアクセスを拒否するように.htaccessを設定したり、ファイルに保存されているパスワードを暗号化したりするなど、セキュリティの2つの層がない公開されているマシンでこれを実行したくありません。私の目的のために、LAN上の別のマシンからLAN上の1つのマシンにログインしています。パスワードは私のLAN(私のWebサーバーではない)でのみ有効であり、私のLANはそれを認識できますが、(私の知る限りでは)世界中で(簡単に)利用できるべきではありません。したがって、セキュリティ上の懸念は最小限です。

于 2012-05-17T23:30:54.300 に答える
0

私はこれを理解したことがありません。ヘッドレスは、PHP にスクリプトを実行させるための答えではありません。これは Firefox の実行可能ファイルのパーミッションの問題であると確信していますが、実際の修正が見つかるまでは断言できません。

最終的に、PHP が DB とタスクのスケジューリングを管理するツールを分割する必要がありました。次に、PHP は、Ruby がブラウザーを正しいサイト、ログインなどで実行するために必要なすべてのデータを含むテキスト ファイルを作成します。次に、Ruby はデータ ファイルをいくつかの異なるフォルダー (成功、失敗、不正なログインなど) の 1 つに移動します。 )、データ ファイルにテキストを追加します。最後に、PHP は移動されたテキスト ファイル内のこのすべての情報を解析し、その情報で DB を更新します。

それは理想的とは言えませんが、仕事を成し遂げています。今、私は複数のスレッドでこれらすべてを実行する方法を理解する必要があります...

助けてくれてありがとう

于 2011-09-16T15:32:53.773 に答える