Selenium::Remote::Driver - JavaScript対応のWebスクレイピング - 日本語訳
Selenium::Remote::Driver-Seleniumリモートドライバー用のPerlクライアントの日本語訳です。自動翻訳・一部翻訳未。
Selenium::Remote::Driver - CPAN
バージョン
バージョン1.38
概要
use Selenium::Remote::Driver;my $driver = Selenium::Remote::Driver->new; $driver->get('<a href="http://www.google.com">http://www.google.com</a>');<div>print $driver->get_title(); $driver->quit();説明
Seleniumは、主流のJavaScript対応ブラウザーを使用して、任意のHTTPWebサイトに対して任意のプログラミング言語で自動化されたWebアプリケーションUIテストを作成できるようにするテストツールです。このモジュールは、Seleniumが提供するリモートドライバーのクライアントの実装です。この場所で他の言語のバインディングを見つけることができます:
https://www.seleniumhq.org/download/
このモジュールは、HTTPを使用してコマンドをサーバーに直接送信します。このモジュールをSeleniumサーバーと一緒に使用すると、サポートされているブラウザーを自動的に制御できます。このモジュールを使用するには、Seleniumサーバーをダウンロードして起動している必要があります(SeleniumサーバーはJavaアプリケーションです)。
使用法
スタンドアロン - サーバーなし
v0.25以降、スタンドアロンサーバーなしでこのモジュールを使用することが可能です。つまり、Seleniumテストを実行するためにJREまたはJDKは必要ありません。詳細については、Selenium::Chrome、Selenium::PhantomJS、Selenium::Edge、Selenium::InternetExplorer、およびSelenium::Firefoxを参照してください。これら以外の追加のブラウザーが必要な場合は、Githubでホラーを提供してください。
リモートドライバーの応答
Selenium::Remote::Driverは、JsonWireProtocolとWC3WebDriverプロトコルを使用してSeleniumサーバーと通信します。コマンドの実行中にエラーが発生した場合、サーバーは、正確な応答エラーコードを示すJSONエンコードされた応答を含むHTTPエラーコードを送り返します。その後、モジュールはこのコードに関連付けられたエラーメッセージで鳴きます。エラーが発生しなかった場合、呼び出されたサブルーチンはサーバーから返送された値を返します(戻り値が送信された場合)。
したがって、ドライバーでメソッドを呼び出す際の経験則では、呼び出されたときにメソッドが鳴らなかった場合、メソッドから何も返されなくても、コマンドは成功したと安全に見なすことができます。
WebElement
Selenium Webdriverは、すべてのHTML要素をWebElementとして表し、WebElementはSelenium::Remote::WebElementモジュールによって表されます。したがって、WebElementsを処理するメソッドは、WebElementオブジェクトを返すか期待します。そのモジュールのPODは、クリック、送信など、WebElementでさまざまなアクションを実行するすべてのメソッドを記述します。
WebElementを操作するには、最初にWebElementを「検索」する必要があります。詳細については、PODのfind_elementまたはfind_elementsを参照してください。必要な要素を見つけたら、さまざまなアクションを実行できます。最初にfind_ *メソッドを呼び出さないと、その要素に対してそれ以降のすべてのアクションが失敗します。最後に、WebElementオブジェクトをインスタンス化する必要はまったくないことを覚えておいてください。find_*メソッドを使用すると、オブジェクトは自動的に作成されます。
Selenium::Remote::WebElementのサブクラスは、コンストラクターのオプションとしてそのクラス名を提供することにより、Selenium::Remote::WebElementの代わりに使用できます。
my $driver = Selenium::Remote::Driver->new( webelement_class => ... );たとえば、testing-subclassは、テストメソッドを使用してWeb要素オブジェクトを拡張できます。
LWP読み取りタイムアウトエラー
デフォルトのLWP::UserAgentタイムアウトよりも時間がかかるSelenium呼び出しを行うことができます。たとえば、非同期スクリプトのタイムアウトをLWP::UserAgentのタイムアウトよりも大きく設定してから、長時間実行されているjavascriptの非同期スニペットを実行すると、次のようなエラーがすぐにトリガーされます。
Error while executing command: executeAsyncScript: Server returnederror message read timeout at...これを回避するには、LWPのタイムアウト値を構成します。独自のLWPを作成し、インスタンス化中に::Driverに渡します。
my $timeout_ua = LWP::UserAgent->new;$timeout_ua->timeout(360); # this value is in seconds!my $d = Selenium::Remote::Driver->new( ua => $timeout_ua );または、必要に応じてその場でタイムアウトを構成します。
use feature qw/say/;use Selenium::Remote::Driver;my $d = Selenium::Remote::Driver->new;say $d->ua->timeout; # 180 seconds is the default$d->ua->timeout(2); # LWP wants seconds, not milliseconds!$d->set_timeout('script', 1000); # S::R::D wants milliseconds!# Async scripts only return when the callback is invoked. Since there# is no callback here, Selenium will block for the entire duration of# the async timeout script. This will hit Selenium's async script# timeout before hitting LWP::UserAgent's read timeout$d->execute_async_script('return "hello"');$d->quit;テスト
このモジュールを使用して自動テストを作成している場合は、このディストリビューションにも含まれているTest::Selenium::Remote::Driverに興味があるかもしれません。ここで利用可能な多くのセレンメソッドの便利なテストメソッドが含まれています。
他のオプションは、このモジュールを、Test::SpecやTest::Moreなどの選択したテストモジュールと組み合わせて使用することです。
WC3WEBDRIVERの互換性
WC3 Webdriverは常に進化している標準であるため、特定の時点で機能する場合と機能しない場合があります。
さらに、古いドライバーはおそらくWD3として識別されますが、いくつかのメソッドを実装し、JSONWire機能を保持しています。これに対処する1つの方法は、次のように設定することです。
$driver->{is_wd3} = 0もちろん、これにより新しいWC3メソッドにアクセスできなくなりますが、ブラウザーのドライバーが一緒に動作するようになるまで、テストに合格する可能性があります。
Selenium::Remote::WebElement::get_attributeなど、メソッドでエミュレートするJSONWireの動作もいくつかあります。これを回避するには、サブに追加のフラグを渡すか、次のように設定します。
$driver->{emulate_jsonwire} = 0;WC3Webdriverモードの場合。
ファインダー
この定数は、wd2からwd3までの古い要素ファインダーエイリアスのhashrefマップです。
use Data::Dumper;print Dumper($Selenium::Remote::Driver::FINDERS);WC3WEBDRIVERの現在のステータス
そうは言っても、モジュールのat /(受け入れテスト)ディレクトリにある次の「サニティテスト」は、次のバージョンで渡されました。
- Seleniumサーバー:3.8.1-すべてのテスト
- geckodriver:0.19.1-at / sanity.test、at / firefox.test(Selenium::Firefox)
- chromedriver:2.35-at / sanity-chrome.test、at / chrome.test(Selenium::Chrome)
- エッジドライバー:5.16299-at / sanity-edge.test
- InternetExplorerDriver:3.8.1-at / sanity-ie.test(「詳細設定」ペインで「ローカルファイルがアクティブコンテンツを実行できるようにする」を必ず有効にしてください)
- safaridriver:11.0.2-at / sanity-safari.test(開発者メニューで「自動テストを許可する」を必ず有効にしてください)-WC3仕様は*未実装*のようです
これらのテストは、上記のドライバーが構成されたローカルホスト上の動作中のセレニウムサーバーに対して直接実行することを目的としています。
ドライバーのバージョン(およびその他のいくつかの癖)で「機能するものと機能しないもの」について知りたい場合は、テストが目的のメソッドを呼び出す場所を確認することを強くお勧めします。
他のブラウザ/ドライバ(特にレガシーブラウザ)も正常に動作する可能性がありますが、上記にリストされていない場合、新しいブラウザ/ドライバで問題が発生する可能性があります。
古いブラウザ/セレン(2.xサーバー、geckodriver以前)に対して実行できる「legacy.test」ファイルもあります。これは、下位互換性が損なわれていないことを確認するためにのみ使用する必要があります。
Firefoxノート
geckodriverを使用してWD3対応サーバー上のfirefoxにextra_capabilitiesを渡す場合は、次のことを行う必要があります。
$Selenium::Remote::Driver::FORCE_WD3=1;これは、geckoドライバーがレガシー機能を好むためです。レガシー機能は通常、互換性の理由から渡されます。
Chromeノート
chromedriverが有効になっているWD3対応サーバーでextra_capabilitiesを渡す場合は、chromeOptionsの代わりにオプションgoog:chromeOptionsを使用してください。
また、オブジェクトをWC3モード(デフォルト)でインスタンス化すると、リモートドライバーは、geckodriverのように該当する場合はJSONWireメソッドにフォールバックするのではなく、キャッチする以外に選択肢のない例外をスローします。
chrome 75(および適切なドライバーバージョン)の時点で、WC3仕様がついに実装されました。そのため、これより古いChromeを使用するには、JSONWireモードを手動で強制する必要があります。
$Selenium::Remote::Driver::FORCE_WD2=1;selenium.jarを介したSeleniumの大規模な実行に関する注意
多くのテストを並行して実行すると、最終的にリソースが枯渇する可能性があります。爆発を回避するために、SeleniumJARにクリーンアップを実行するように指示する必要があります。
セレニウムサーバーのnode.json(グリッドを実行)の内部に、次のように入力します。
"configuration":{"cleanUpCycle":2000}または、-cleanupCycleパラメーターを指定してSeleniumjarを実行します。もちろん、状況に適した秒数を使用してください。
コンストラクタ
new
セレニウムサーバーとの通信が確立できない場合は終了します。
入力:(すべてオプション)
必要な機能-ハッシュ-次のオプションが受け入れられます。
- remote_server_addr- <string> -WebdriverサーバーマシンのIPまたはFQDN。デフォルト: 'localhost'
- port- <文字列> -ポートwebdriverをサーバが受信しています。デフォルト:4444
- browser_name- <string>-目的のブラウザー文字列:{phantomjs | firefox | Internet Explorer | MicrosoftEdge | safari | htmlunit | iphone | chrome}
- version-<文字列>-目的のブラウザのバージョン番号
- platform-<文字列>-目的のプラットフォーム:{WINDOWS | XP | VISTA | MAC | LINUX | UNIX | ANY}
- accept_ssl_certs- <boolean> -SSL証明書を受け入れるかどうか。デフォルトはtrueです。
- firefox_profile-プロファイル-Selenium::Firefox::Profileを使用して、ブラウザが使用するFirefoxプロファイルを作成します。
- javascript- <boolean> -Javascriptを使用するかどうか。代わりにWWW::Mechanizeを使用するため、おそらくこれを無効にすることはありません。デフォルト:True
- auto_close- <boolean>-オブジェクトがスコープ外になったときにサーバー上のブラウザセッションを自動的に閉じるかどうか。デフォルト:False。
- default_finder- <string>-セレクターを評価するためのデフォルトの方法。デフォルト: 'xpath'
- session_id- <string>-リモートサーバー上のブラウザセッションをハイジャックするためのセッションIDを提供します。マイクロオプティマイザーに役立ちます。デフォルト:undef
- pageLoadStrategy -文字列-OPTIONAL、 'normal | eager | none'。デフォルトの「通常」。WebDriver3のみ。
- extra_capabilities - ハッシュ-その他の追加機能。使用できるキーはブラウザによって異なります。firefox_profileが渡されると、渡された方法に応じて、args(またはprofile)キーが上書きされます。
WebDriver3では、「extra_capabilities」がブラウザに必要なパラメータに自動的に変換されます。たとえば、extra_capabilitiesはmoz:firefoxOptionsパラメーターとしてサーバーに渡されます。
コンストラクターハッシュで、ブラウザー関連の目的の機能の一部ではないいくつかのオプションを指定することもできます。
- auto_close- <boolean>-ドライバーがクローズ時にリモートサーバーでセッションを終了するかどうか。
- base_url- <string>-オプション、Seleniumが動作するWebサイトのベースURL。これにより、$ driver-> get()を呼び出すたびにドメインを繰り返す必要がなくなります。
- default_finder- <string> -find_element *に使用されるデフォルトのファインダーを選択します* {class | class_name | css | id | link | link_text | name | partial_link_text | tag_name | xpath}
- inner_window_size- <aref [Int]>-インスタンス化直後にブラウザウィンドウが初期サイズとして使用する配列ref [height、width]
- error_handler -CODEREF-例外が発生した場合に呼び出すCODEREF。詳細については、「error_handler」を参照してください。
- webelement_class- <string>-代替のWebElementクラスを使用する場合は、Selenium::Remote::WebElementのサブクラス。
- ua -LWP::UserAgentインスタンス-Test::LWP::UserAgentのように、特定の$ uaを使用する場合
- proxy -ハッシュ-次のキーを使用したプロキシ構成:
- proxyType- <string>-必須、可能な値は次のとおりです。
direct - A direct connection - no proxy in use,manual - Manual proxy settings configured, e.g. setting a proxy for HTTP, a proxy for FTP, etc,pac - Proxy autoconfiguration from a URL,autodetect - proxy autodetection, probably with WPAD,system - Use system settings- proxyAutoconfigUrl- <string> -proxyTypeが 'pac'の場合は必須、それ以外の場合は無視されます。予想される形式:http://hostname.com:1234 / pacfileまたはfile:/// path / to / pacfile
- ftpProxy- <string>-オプション。proxyTypeが「manual」でない場合は無視されます。予想される形式:hostname.com:1234
- httpProxy- <string>-オプション。proxyTypeが「manual」でない場合は無視されます。予想される形式:hostname.com:1234
- sslProxy- <string>-オプション。proxyTypeが「manual」でない場合は無視されます。予想される形式:hostname.com:1234
- socksProxy- <string>-オプション。proxyTypeが「manual」でない場合は無視されます。予想される形式:hostname.com:1234。WebDriver3のみ。
- socksVersion- <int>-オプション。proxyTypeが「manual」でない場合は無視されます。WebDriver3のみ。
- noProxy- <配列>-オプション、プロキシをバイパスするURLのリスト。WebDriver3のみ。
- firefox_profile- <string> -FirefoxプロファイルディレクトリのBase64エンコードZIPファイル。Selenium::Firefox::Profileが不要な場合に使用します。
出力:
Selenium::Remote::Driverオブジェクト
使用法:
my $driver = Selenium::Remote::Driver->new;#ormy $driver = Selenium::Remote::Driver->new('browser_name' => 'firefox','platform' => 'MAC');#or (for Firefox 47 or lower on Selenium 3+)my $driver = Selenium::Remote::Driver->new('browser_name' => 'firefox','platform' => 'MAC','extra_capabilities' => {'marionette' => \0,});#ormy $driver = Selenium::Remote::Driver->new('remote_server_addr' => '10.10.1.1','port' => '2222','auto_close' => 0);#ormy $driver = Selenium::Remote::Driver->new('browser_name' =>'chrome','extra_capabilities' => {'goog:chromeOptions' => {'args' => ['window-size=1260,960','incognito'],'prefs' => {'session' => {'restore_on_startup' => 4,'urls_to_restore_on_startup' => []},'first_run_tabs' => []}}});#ormy $driver = Selenium::Remote::Driver->new('proxy' => {'proxyType' => 'manual', 'httpProxy' => 'myproxy.com:1234'});#ormy $driver = Selenium::Remote::Driver->new('default_finder' => 'css');error_handler
clear_error_handler
オプションのコンストラクター引数と関連するセッター/クリアラー:独自のエラーハンドラーをインストールする場合は、error_handlerインスタンス化中に次のようにコードrefを渡すことができます。
my $driver = Selenium::Remote::Driver->new(error_handler => sub { print $_[1]; croak 'goodbye'; });さらに、すでにインスタンス化されているドライバーでいつでも設定および/またはクリアできます。
# later, change the error handler to something else$driver->error_handler( sub { print $_[1]; croak 'hello'; } );# stop handling errors manually and use the default S:R:D behavior# (we will croak about the exception)$driver->clear_error_handler;エラーハンドラは3つの引数を受け取ります。最初の引数は$driverオブジェクト自体であり、2番目の引数は例外メッセージと1つの複数行文字列のスタックトレースです。最後の引数は、実行されたばかりのコマンドの引数配列です。
N.B.: If you set your own error handler, you are entirely responsible for handling webdriver exceptions, _including_ croaking behavior. That is, when you set an error handler, we will no longer croak on Webdriver exceptions - it's up to you to do so. For consistency with the standard S:R:D behavior, we recommend your error handler also croak when it's done, especially since your test shouldn't be running into unexpected errors. Catching specific or desired errors in your error handler makes sense, but not croaking at all can leave you in unfamiliar territory. Reaching an unexpected exception might mean your test has gone off the rails, and the further your test gets from the source of the of the exception, the harder it will be to debug.
NB:四つの方法は、まだ自分でcroakします:"find_element" 、"find_elements" 、"find_child_element" 、および"find_child_elementsを"。これらのメソッドがWebdriverExceptionをスローした場合でも、エラーハンドラーは内部で呼び出され、eval使用されたロケーターとストラテジーを示す独自のエラーメッセージが鳴り響きます。したがって、要素を検索するときに例外を回避するための戦略は変わりません(find_elementsを使用して返される配列サイズを確認するか、find_element *への呼び出しをでラップするevalか、パラメーター化されたバージョンのfind_element_ *を使用します)。
new_from_caps
For experienced users who want complete control over the desiredcapabilities, use this alternative constructor along with theC<desired_capabilities> hash key in the init hash. Unlike "new",this constructor will not assume any defaults for your desiredcapabilities.This alternate constructor IGNORES all other browser-relateddesiredCapability options; the only options that will be respectedare those that are NOT part of the Capabilities JSON Object asdescribed in the Json Wire Protocol.入力:
The only respected keys in the input hash are:desired_capabilities - ハッシュREF - defaults to {}remote_server_addr - 文字列 - defaults to localhostport - 整数EGER - defaults to 4444default_finder - 文字列 - defaults to xpathwebelement_class - 文字列 - defaults to Selenium::Remote::WebElementauto_close - ブール値 - defaults to 1error_handler - CODEREF - defaults to croaking on exceptionsExcept for C<desired_capabilities>, these keys perform exactly thesame as listed in the regular "new" constructor.The hashref you pass in as desired_capabilities only gets jsonencoded before being passed to the Selenium server; no defaultoptions of any sort will be added.This means you must handle normalization and casing of the inputoptions (like "browser_name" vs "browserName") and take care ofthings like encoding the firefox profile if applicable. Moreinformation about the desired capabilities object is available onthe Selenium wiki:https://code.google.com/p/selenium/wiki/JsonWireProtocol#Capabilities_JSON_Object出力:
Remote Driver object使用方法:
<div>my $driver = Selenium::Remote::Driver->new_from_caps(</div><div>'desired_capabilities' => {'browserName' => 'firefox'}</div><div>);<div></div><div>The above would generate a POST to the webdriver server at</div><div>localhost:4444 with the exact payload of '{"desiredCapabilities":</div><div>{"browserName": "firefox" }}'.</div>方法
new_session(extra_capabilities)
サーバー上で新しいセッションを作成します。new()によって呼び出され、通常の使用を目的としていません。
ブロワーのクラッシュから回復するのに時々便利です。
デンジャーデンジャーデンジャー
これにより、古いセッションを閉じていない場合は破棄されます。
デンジャーデンジャーデンジャー
new_desired_session(capabilities)
基本的にnew_sessionと同じですが、キャップが付いています。new_from_capsに類似したものです。
is_webdriver_3
サーバー(またはブラウザー)がWebdriver 3を実装していると見なすかどうかを出力します。これがtrueを返す場合、呼び出しようとしているメソッドのアクションがSelenium::Remote::Specに存在する場合、Webdriver3メソッドが使用されます。呼び出しているメソッドに同等のWebdriver3(またはブラウザー拡張機能)がない場合、Selenium::Remote::Commandsで実装されているレガシーコマンドが使用されます。
上記の*考え*の言い方に注意してください。レガシーメソッドの使用を強制する場合は、さまざまなブラウザの問題を回避するように$ driver-> {is_wd3}を設定します。
debug_on
Turns on debugging mode and the driver will print extra info like requestand response to stdout. Useful, when you want to see what is being sent tothe server & what response you are getting back.使用方法:
$driver->debug_on;debug_off
Turns off the debugging mode.使用方法:
$driver->debug_off;get_sessions
Returns a list of the currently active sessions. Each session will bereturned as an array of Hashes with the following keys:'id' : The session ID'capabilities: An object describing session's capabilities出力:
Array of Hashes使用方法:
<div>print Dumper $driver->get_sessions();status
Query the server's current status. All server implementationsshould return two basic objects describing the server's currentplatform and when the server was built.出力:
Hash ref使用方法:
<div>print Dumper $driver->status;get_alert_text
Gets the text of the currently displayed JavaScript alert(), confirm()or prompt() dialog.Examplemy $string = $driver->get_alert_text;send_keys_to_active_element
Send a sequence of key strokes to the active element. This command issimilar to the send keys command in every aspect except the implicittermination: The modifiers are not released at the end of the call.Rather, the state of the modifier keys is kept between calls, so mouseinteractions can be performed while modifier keys are depressed.Compatibility:On webdriver 3 servers, don't use this to send modifier keys; use send_modifier instead.入力1:
<div>必須:</div><div>{配列 | 文字列} - Array of strings or a string.</div><div></div> <b>使用方法:</b> <pre> $driver->send_keys_to_active_element('abcd', 'efg'); $driver->send_keys_to_active_element('hijk');<div></div><div>or</div><div></div><div># include the WDKeys module</div><div>use <a href="/pod/Selenium::Remote::WDKeys">Selenium::Remote::WDKeys</a>; $driver->send_keys_to_active_element(KEYS->{'space'}, KEYS->{'enter'});send_keys_to_alert
send_keys_to_promptと同義
send_keys_to_prompt
Sends keystrokes to a JavaScript prompt() dialog.入力:
{string} keys to sendExample:$driver->send_keys_to_prompt('hello world');orok($driver->get_alert_text eq 'Please Input your name','prompt appears');$driver->send_keys_to_alert("Larry Wall");
$driver->accept_alert;
accept_alert
Accepts the currently displayed alert dialog. Usually, this isequivalent to clicking the 'OK' button in the dialog.Example:$driver->accept_alert;dismiss_alert
Dismisses the currently displayed alert dialog. For comfirm()and prompt() dialogs, this is equivalent to clicking the'Cancel' button. For alert() dialogs, this is equivalent toclicking the 'OK' button.Example:$driver->dismiss_alert;general_action
Webドライバーが入力デバイスを使用できるように、「アクション定義」ハッシュを提供します。このデータの構造の仕様が「非規範的」であることを考えると、この関数の使用方法に関してそれが何を意味するかは読者の練習問題として残されています。
そうは言っても、ほとんどのデータは次のようになっているようです。
$driver->general_action( actions => [{type => 'pointer|key|none|somethingElseSuperSpecialDefinedByYourBrowserDriver',id => MUST be mouse|key|none|other. And by 'other' I mean anything else. The first 3 are 'special' in that they are used in the global actions queue.If you want say, another mouse action to execute in parallel to other mouse actions (to simulate multi-touch, for example), call your action 'otherMouseAction' or something.parameters => {someOption => "basically these are global parameters used by all steps in the forthcoming "action chain".},actions => [{type => "keyUp|KeyDown if key, pointerUp|pointerDown|pointerMove|pointerCancel if pointer, pause if any type",key => A raw keycode or character from the keyboard if this is a key event,duration => how many 'ticks' this action should take, you probably want this to be 0 all of the time unless you are evading Software debounce.button => what number button if you are using a pointer (this sounds terribly like it might be re-purposed to be a joypad in the future sometime)origin => Point of Origin if moving a pointer aroundx => unit vector to travel along x-axis if pointerMove eventy => unit vector to travel along y-axis if pointerMove event},...]},...])WebDriver3対応のセレニウムサーバーでのみ使用できます。
以前にmouse_move_to_location()などのレガシーシムを呼び出したことがある場合、渡されたアクションは既存のアクションキューに追加されます。引数なしで呼び出され、既存のアクションキューを実行するだけです。
現在Selenium::Remote::Driverの一部ではないプリベークされたアクションチェーンを探している場合は、代わりにこのディストリビューションに付属しているSelenium::ActionChainsを検討してください。
release_general_action
軌道から*すべて*の入力デバイス状態(修飾キーの上下、ポインターボタンの上下、ポインターの位置、およびその他のデバイスの状態)を削除します。提供されたアクションチェーンで* Upイベントを実行するのを忘れた場合、または単に時間を節約するために電話してください。
また、現在のアクションキューをクリアします。
WebDriver3対応のセレニウムサーバーでのみ使用できます。
mouse_move_to_location
Move the mouse by an offset of the specificed element. If noelement is specified, the move is relative to the current mousecursor. If an element is provided but no offset, the mouse will bemoved to the center of the element. If the element is not visible,it will be scrolled into view.Compatibility:Due to limitations in the Webdriver 3 API, mouse movements have to be executed 'lazily' e.g. only right before a click() event occurs.This is because there is no longer any persistent mouse location state; mouse movements are now totally atomic.This has several problematic aspects; for one, I can't think of a way to both hover an element and then do another action relying on the element staying hover()ed,Aside from using javascript workarounds.出力:
文字列 -使用方法:
<div># element - the element to move to. If not specified or is null, the offset is relative to current position of the mouse.</div><div># xoffset - X offset to move to, relative to the top-left corner of the element. If not specified, the mouse will move to the middle of the element.</div><div># yoffset - Y offset to move to, relative to the top-left corner of the element. If not specified, the mouse will move to the middle of the element.</div><div></div><div>print $driver->mouse_move_to_location(element => e, xoffset => x, yoffset => y);move_to
mouse_move_to_locationと同義
get_capabilities
Retrieve the capabilities of the specified session.出力:
ハッシュ of all the capabilities.使用方法:
<div>my $capab = $driver->get_capabilities();<div>print Dumper($capab);get_timeouts
Get the currently configured values (ms) for the page load, script and implicit timeouts.Compatibility:Only available on WebDriver3 enabled selenium servers.使用方法:
$driver->get_timeouts();set_timeout
Configure the amount of time that a particular type of operation can executefor before they are aborted and a |Timeout| error is returned to the client.入力:
type - <文字列> - The type of operation to set the timeout for.Valid values are:"script" : for script timeouts,"implicit" : for modifying the implicit wait timeout"page load" : for setting a page load timeout.ms - <NUMBER> - The amount of time, in milliseconds, that time-limitedcommands are permitted to run.使用方法:
$driver->set_timeout('script', 1000);set_async_script_timeout
Set the amount of time, in milliseconds, that asynchronous scripts executedby execute_async_script() are permitted to run before they areaborted and a |Timeout| error is returned to the client.入力:
ms - <NUMBER> - The amount of time, in milliseconds, that time-limitedcommands are permitted to run.使用方法:
$driver->set_async_script_timeout(1000);set_implicit_wait_timeout
Set the amount of time the driver should wait when searching for elements.When searching for a single element, the driver will poll the page untilan element is found or the timeout expires, whichever occurs first.When searching for multiple elements, the driver should poll the page untilat least one element is found or the timeout expires, at which point itwill return an empty list. If this method is never called, the driver willdefault to an implicit wait of 0ms.This is exactly equivalent to calling L</set_timeout> with a typearg of C<"implicit">.入力:
Time in milliseconds.出力:
Server Response Hash with no data returned back from the server.使用方法:
$driver->set_implicit_wait_timeout(10);pause
Pause execution for a specified interval of milliseconds.使用方法:
$driver->pause(10000); # 10 second delay</div>$driver->pause(); # 1 second delay default</div><div></div><div>DEPRECATED: consider using Time::HiRes instead.</div>close
Close the current window.使用方法:
$driver->close();<div>or</div><div>#close a popup window</div><div>my $handles = $driver->get_window_handles; $driver->switch_to_window($handles->[1]); $driver->close(); $driver->switch_to_window($handles->[0]);quit
DELETE the session, closing open browsers. We will try to callthis on our down when we get destroyed, but in the event that weare demolished during global destruction, we will not be able toclose the browser. For your own unattended and/or complicatedtests, we recommend explicitly calling quit to make sure you'renot leaving orphan browsers around.Note that as a Moo class, we use a subroutine called DEMOLISH thattakes the place of DESTROY; for more information, seehttps://metacpan.org/pod/Moo#DEMOLISH.使用方法:
$driver->quit();get_current_window_handle
Retrieve the current window handle.出力:
文字列 - the window handle使用方法:
<div>print $driver->get_current_window_handle();get_window_handles
Retrieve the list of window handles used in the session.出力:
配列 of 文字列 - list of the window handles使用方法:
<div>print Dumper $driver->get_window_handles;<div>or</div><div># get popup, close, then back</div><div>my $handles = $driver->get_window_handles; $driver->switch_to_window($handles->[1]); $driver->close; $driver->switch_to_window($handles->[0]);get_window_size
Retrieve the window sizeCompatibility:The ability to get the size of arbitrary handles by passing input only exists in WebDriver2.You will have to switch to the window first going forward.入力:
文字列 - <optional> - window handle (default is 'current' window)出力:
ハッシュ - containing keys 'height' & 'width'使用方法:
<div>my $window_size = $driver->get_window_size();<div>print $window_size->{'height'}, $window_size->{'width'};get_window_position
Retrieve the window positionCompatibility:The ability to get the size of arbitrary handles by passing input only exists in WebDriver2.You will have to switch to the window first going forward.入力:
文字列 - <optional> - window handle (default is 'current' window)出力:
ハッシュ - containing keys 'x' & 'y'使用方法:
<div>my $window_size = $driver->get_window_position();<div>print $window_size->{'x'}, $window_size->('y');get_current_url
Retrieve the url of the current page出力:
文字列 - url使用方法:
<div>print $driver->get_current_url();navigate
Navigate to a given url. This is same as get() method.入力:
文字列 - url使用方法:
$driver->navigate('<a href="http://www.google.com">http://www.google.com</a>');get
Navigate to a given url入力:
文字列 - url使用方法:
$driver->get('<a href="http://www.google.com">http://www.google.com</a>');get_title
Get the current page title出力:
文字列 - Page title使用方法:
<div>print $driver->get_title();go_back
Equivalent to hitting the back button on the browser.使用方法:
$driver->go_back();go_forward
Equivalent to hitting the forward button on the browser.使用方法:
$driver->go_forward();refresh
Reload the current page.使用方法:
$driver->refresh();has_javascript
returns true if javascript is enabled in the driver.Compatibility:Can't be false on WebDriver 3.使用方法:
<div>if ($driver->has_javascript) { ...; }</div>execute_async_script
Inject a snippet of JavaScript into the page for execution in the contextof the currently selected frame. The executed script is assumed to beasynchronous and must signal that is done by invoking the providedcallback, which is always provided as the final argument to the function.The value to this callback will be returned to the client.Asynchronous script commands may not span page loads. If an unload eventis fired while waiting for a script result, an error should be returnedto the client.Input: 2 (1 optional)必須:文字列 - Javascript to execute on the pageOptional:配列 - list of arguments that need to be passed to the script.出力:
{*} - Varied, depending on the type of result expected back from the script.使用方法:
<div>my $script = q{</div><div>var arg1 = arguments[0];<div>var callback = arguments[arguments.length-1];<div>var elem = window.document.findElementById(arg1);<div>callback(elem);<div>};<div>my $elem = $driver->execute_async_script($script,'myid');<div>$elem->click;execute_script
Inject a snippet of JavaScript into the page and return its result.WebElements that should be passed to the script as an argument should bespecified in the arguments array as WebElement object. Likewise,any WebElements in the script result will be returned as WebElement object.Input: 2 (1 optional)必須:文字列 - Javascript to execute on the pageOptional:配列 - list of arguments that need to be passed to the script.出力:
{*} - Varied, depending on the type of result expected back from the script.使用方法:
<div>my $script = q{</div><div>var arg1 = arguments[0];<div>var elem = window.document.findElementById(arg1);<div>return elem;<div>};<div>my $elem = $driver->execute_script($script,'myid');<div>$elem->click;screenshot
Get a screenshot of the current page as a base64 encoded image.Optionally pass {'full' => 1} as argument to take a full screenshot and notonly the viewport. (Works only with firefox and geckodriver >= 0.24.0)出力:
文字列 - base64 encoded image使用方法:
<div>print $driver->screenshot();<div>print $driver->screenshot({'full' => 1});スクリーンショットをファイルに簡単に書き込むには、「capture_screenshot」を参照してください。
capture_screenshot
Capture a screenshot and save as a PNG to provided file name.(The method is compatible with the WWW::Selenium method of the same name)Optionally pass {'full' => 1} as second argument to take a full screenshotand not only the viewport. (Works only with firefox and geckodriver >= 0.24.0)出力:
TRUE - (Screenshot is written to file)使用方法:
$driver->capture_screenshot($filename); $driver->capture_screenshot($filename, {'full' => 1});available_engines
List all available engines on the machine. To use an engine, it has to be present in this list.Compatibility:Does not appear to be available on Webdriver3 enabled selenium servers.出力:
{Array.<string>} A list of available engines使用方法:
<div>print Dumper $driver->available_engines;switch_to_frame
Change focus to another frame on the page. If the frame ID is null, theserver will switch to the page's default content. You can also switch to aWebElement, for e.g. you can find an iframe using find_element & thenprovide that as an input to this method. Also see e.g.入力1:
<div>必須:</div><div>{文字列 | NUMBER | NULL | WebElement} - ID of the frame which can be one of the three</div><div>mentioned.</div><div></div> <b>使用方法:</b> <pre> $driver->switch_to_frame('frame_1');<div>or</div>$driver->switch_to_frame($driver->find_element('iframe', 'tag_name'));switch_to_parent_frame
Webdriver 3は、引数なしでswitch_to_frameを呼び出すのと同じです(例:NULLフレーム)。その場合、これは実際に呼び出されます。現在、WD3対応サーバーを使用していると仮定します。
switch_to_window
Change focus to another window. The window to change focus to maybe specified by its server assigned window handle, or by the valueof the page's window.name attribute.If you wish to use the window name as the target, you'll need tohave set C<window.name> on the page either in app code or viaL</execute_script>, or pass a name as the second argument to theC<window.open()> function when opening the new window. Note thatthe window name used here has nothing to do with the window title,or the C<< <title> >> element on the page.Otherwise, use L</get_window_handles> and select aWebdriver-generated handle from the output of that function.入力1:
<div>必須:</div><div>文字列 - Window handle or the Window name</div><div></div> <b>使用方法:</b> <pre> $driver->switch_to_window('MY Homepage');<div>or</div><div># close a popup window and switch back</div><div>my $handles = $driver->get_window_handles; $driver->switch_to_window($handles->[1]); $driver->close; $driver->switch_to_window($handles->[0]);set_window_position
Set the position (on screen) where you want your browser to be displayed.Compatibility:In webDriver 3 enabled selenium servers, you may only operate on the focused window.As such, the window handle argument below will be ignored in this context.入力:
整数 - x co-ordinate整数 - y co-ordinate文字列 - <optional> - window handle (default is 'current' window)出力:
ブール値 - Success or failure使用方法:
$driver->set_window_position(50, 50);set_window_size
Set the size of the browser windowCompatibility:In webDriver 3 enabled selenium servers, you may only operate on the focused window.As such, the window handle argument below will be ignored in this context.入力:
整数 - height of the window整数 - width of the window文字列 - <optional> - window handle (default is 'current' window)出力:
ブール値 - Success or failure使用方法:
$driver->set_window_size(640, 480);maximum_window
Maximizes the browser windowCompatibility:In webDriver 3 enabled selenium servers, you may only operate on the focused window.As such, the window handle argument below will be ignored in this context.Also, on chromedriver maximize is actually just setting the window size to the screen'savailable height and width.入力:
文字列 - <optional> - window handle (default is 'current' window)出力:
ブール値 - Success or failure使用方法:
$driver->maximize_window();minimize_window
Minimizes the currently focused browser window (webdriver3 only)出力:
ブール値 - Success or failure使用方法:
$driver->minimize_window();fullscreen_window
Fullscreens the currently focused browser window (webdriver3 only)出力:
ブール値 - Success or failure使用方法:
$driver->fullscreen_window();get_all_cookies
Retrieve all cookies visible to the current page. Each cookie will bereturned as a ハッシュ reference with the following keys & their value types:'name' - 文字列'value' - 文字列'path' - 文字列'domain' - 文字列'secure' - ブール値出力:
配列 of ハッシュES - list of all the cookie hashes使用方法:
<div>print Dumper($driver->get_all_cookies());add_cookie
Set a cookie on the domain.Input: 2 (4 optional)必須:'name' - 文字列'value' - 文字列Optional:'path' - 文字列'domain' - 文字列'secure' - ブール値 - default false.'httponly' - ブール値 - default false.'expiry' - TIME_T - default 20 years in the future使用方法:
$driver->add_cookie('foo', 'bar', '/', '.google.com', 0, 1)</div>delete_all_cookies
Delete all cookies visible to the current page.使用方法:
$driver->delete_all_cookies();get_cookie_named
基本的に、指定された名前のCookieのみを取得します。*本当に*長いリストを期待しない限り、リストからそれを選択することをお勧めします。
<b>入力:</b> <div>Cookie Name - 文字列</div>get_all_cookies();の要素と同様に、Cookie定義ハッシュを返します。
Compatibility:Only available on webdriver3 enabled selenium servers.delete_cookie_named
Delete the cookie with the given name. This command will be a no-op if thereis no such cookie visible to the current page.入力1:
<div>必須:</div><div>文字列 - name of cookie to delete</div><div></div> <b>使用方法:</b> <pre> $driver->delete_cookie_named('foo');get_page_source
Get the current page source.出力:
文字列 - The page source.使用方法:
<div>print $driver->get_page_source();find_element
ドキュメントルートから始めて、ページ上の要素を検索します。見つかった要素は、WebElementオブジェクトとして返されます。要素が見つからない場合は、CROAKを実行して、スクリプトを強制終了します。代わりに警告が必要な場合は、パラメーター化されたバージョンのファインダーを使用してください。
find_element_by_class
find_element_by_class_name
find_element_by_css
find_element_by_id
find_element_by_link
find_element_by_link_text
find_element_by_name
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_xpathThese
これらの関数はすべて、単一の文字列引数を取ります。つまり、必要な要素のロケーター検索ターゲットです。要素が見つかった場合、WebElementを受け取ります。それ以外の場合は、0を返します。0でメソッドを呼び出すと、もちろんスクリプトが強制終了されることに注意してください。
入力:
2つ (1つは任意)
必須:
文字列 - 検索ターゲット.
任意:
文字列 - 要素の検索に使用するロケータースキーム、使用可能なスキーム:
{class, class_name, css, id, link, link_text, partial_link_text, tag_name, name, xpath}
インスタンス化するときに中にグローバルに設定されていない場合、デフォルトは「xpath」です。
出力:
Selenium::Remote::WebElement - WebElement Object
これはwebelement_classが設定されている場合は、Selenium::Remote::WebElementのサブクラスである可能性があります。
使用方法:
$driver->find_element("//input[\@name='q']");find_elements
ドキュメントルートから始めて、ページ上の複数の要素を検索します。見つかった要素は、WebElementオブジェクトの配列として返されます。
入力:
2つ (1つは任意)
必須:
文字列 - 検索ターゲット.
任意:
文字列 - 要素の検索に使用するロケータースキーム、使用可能なスキーム:
{class, class_name, css, id, link, link_text, partial_link_text, tag_name, name, xpath}
インスタンス化するときに中にグローバルに設定されていない場合、デフォルトは「xpath」です。
出力:
複数のWebElementオブジェクトを含んだ<配列|配列リファレンス>
使用方法:
$driver->find_elements("//input");find_child_element
Search for an element on the page, starting from the identified element. Thelocated element will be returned as a WebElement object.Input: 3 (1 optional)必須:Selenium::Remote::WebElement - WebElement object from where you want tostart searching.文字列 - The search target. (Do not use a double whack('//')in an xpath to search for a child elementex: '//option[@]'instead use a dot whack ('./')ex: './option[@]')Optional:文字列 - Locator scheme to use to search the element, available schemes:{class, class_name, css, id, link, link_text, partial_link_text,tag_name, name, xpath}Defaults to 'xpath' if not configured global during instantiation.
出力:
WebElement Object
使用方法:
my $elem1 = $driver->find_element("//select[\@name='ned']");# note the usage of ./ when searching for a child element instead of //my $child = $driver->find_child_element($elem1, "./option[\@value='es_ar']");find_child_elements
Search for multiple element on the page, starting from the identifiedelement. The located elements will be returned as an array of WebElementobjects.Input: 3 (1 optional)必須:Selenium::Remote::WebElement - WebElement object from where you want tostart searching.文字列 - The search target.Optional:文字列 - Locator scheme to use to search the element, available schemes:{class, class_name, css, id, link, link_text, partial_link_text,tag_name, name, xpath}Defaults to 'xpath' if not configured global during instantiation.
出力:
配列 of WebElement Objects.
使用方法:
my $elem1 = $driver->find_element("//select[\@name='ned']");# note the usage of ./ when searching for a child element instead of //my $child = $driver->find_child_elements($elem1, "./option");find_element_by_class
「find_element」を参照してください。
find_element_by_class_name
「find_element」を参照してください。
find_element_by_css
「find_element」を参照してください。
find_element_by_id
「find_element」を参照してください。
find_element_by_link
「find_element」を参照してください。
find_element_by_link_text
「find_element」を参照してください。
find_element_by_name
「find_element」を参照してください。
find_element_by_partial_link_text
「find_element」を参照してください。
find_element_by_tag_name
「find_element」を参照してください。
find_element_by_xpath
「find_element」を参照してください。
get_active_element
現在フォーカスがあるページ上の要素を取得します。検索された要素はWebElementオブジェクトとして返されます。
出力:
WebElementオブジェクト
使用方法:
$driver->get_active_element();cache_status
Get the status of the html5 application cache.
使用方法:
print $driver->cache_status;出力:
<number> - Status code for application cache: {UNCACHED = 0, IDLE = 1, CHECKING = 2, DOWNLOADING = 3, UPDATE_READY = 4, OBSOLETE = 5}
set_geolocation
現在の地理的位置を設定する - ドライバーがこのエンドポイントを実装する必要があることに注意してください。少なくとも、それはChromedriverのv2.12で動作します。
入力:
必須:ハッシュ: A hash with key C<location> whose value is a Location hashref. Seeusage section for example.
使用方法:
$driver->set_geolocation( location => {latitude => 40.714353,longitude => -74.005973,altitude => 0.056747});出力:
ブール値 - 成功あるいは失敗
get_geolocation
現在の地理的位置を取得します。 Webドライバーはこのエンドポイントを実装する必要があることに注意してください。実装しないと、セッションがクラッシュします。リリースの時点では、これをdesktopFirefoxDriverまたはデスクトップChromedriverで動作させることができませんでした。
使用方法:
print $driver->get_geolocation;出力:
{ latitude: 数値, longitude: 数値, altitude: 数値 } - 現在の地理的位置
get_log
特定のログタイプのログを取得します。ログバッファは、各要求の後にリセットされます。
入力:
必須:<文字列> - 取得するログの種類:{client|driver|browser|server}他にも利用可能な場合があります。seeget_log_typesnのドライバーの完全なリストを表示します。
使用方法:
$driver->get_log( $log_type ); <b>出力:</b> <配列|配列REF> - An array of log entries since the most recent request.get_log_types
使用可能なログの種類を取得します。既定では、すべてのドライバーにはクライアント、ドライバー、ブラウザー、およびサーバーの種類が必要ですが、ドライバーによっては、より多くの利用可能ながあります。
使用方法:
my @types = $driver->get_log_types; $driver->get_log($types[0]);出力:
<配列|配列リファレンス> - ログタイプのリストset_orientation
ブラウザの方向を設定します。
入力:
必須:<文字列> - 方向 {LANDSCAPE|PORTRAIT}
使用方法:
$driver->set_orientation( $orientation );出力:
ブール値 - 成功あるいは失敗
get_orientation
現在のブラウザの向きを取得します。LANDSCAPEかPORTRAITを返します。
使用方法:
print $driver->get_orientation;出力:
<文字列> - 向き.
send_modifier
2 つの要素 ID が同じ DOM 要素を参照しているかどうかをテストします。入力: 2 つの体の付け, :リモート:Web要素 - Web 要素オブジェクトセレン::リモート:Web要素 - Web 要素オブジェクト
使用方法:
$driver->send_modifier('Alt','down');$elem->send_keys('c'); $driver->send_modifier('Alt','up');or$driver->send_modifier('Alt',1);$elem->send_keys('c'); $driver->send_modifier('Alt',0);compare_elements
2つの要素IDが同じDOM要素を参照しているかどうかをテストします。
Input:
2つ 必須:
Selenium::Remote::WebElement - WebElement Object
Selenium::Remote::WebElement - WebElement Object
出力:
ブール値
使用方法:
$driver->compare_elements($elem_obj1, $elem_obj2);click
ボタン - 'LEFT'/0 'MIDDLE'/1 'RIGHT'/2デフォルトの'LEFT'キューに1つ - (オプション)クリックを実行するのではなく、キューに入れます。WD3 のみ。
入力:
button - any one of 'LEFT'/0 'MIDDLE'/1 'RIGHT'/2defaults to 'LEFT'queue - (optional) queue the click, rather than executing it. WD3 only.
使用方法:
$driver->click('LEFT'); $driver->click(1); #MIDDLE$driver->click('RIGHT'); $driver->click; #Defaults to leftdouble_click
現在のマウス座標をダブルクリックします(movetoで設定)。互換性:Webdriver3対応サーバーでは、任意のマウスボタンをダブルクリックすることができます。
使用方法:
$driver->double_click(button);button_down
マウスの左ボタンをクリックしたままにします(最後の movetoコマンドで設定した座標で)。次に続くマウス関連のコマンドは buttonup です。他のマウスコマンド(ボタンダウンへの別の呼び出しなど)は未定義の動作を生み出します。キューを実行するにはgeneral_action() を呼び出すか、または click() のようなアクションを呼び出す必要があります。
使用方法:
$self->button_down;button_up
以前に押されていたマウス ボタンを解放します(現在マウスが置かれている場所)。ボタンダウンコマンドが発行されるたびに一度呼び出す必要があります。順序付け切れコマンドの影響に関するクリックとボタンダウンのメモを参照してください。キューを実行するにはgeneral_action() を呼び出すか、または click() のようなアクションを呼び出す必要があります。
使用方法:
$self->button_up;send_keys
ローカル マシンからセレン サーバーマシンにファイルをアップロードします。そのファイルは、Webフォーム上のファイルアップロードのテストに使用できます。ファイルへのリモート サーバーのパスを返します。ファイル名を超えて引数として生データを渡すと、ファイルの内容ではなく、それをアップロードします。生データを渡すときは、単一のファイルの zip と base64 エンコードバージョンを期待することを知らされます。複数のファイルやディレクトリは、リモート サーバーでサポートされていません。
使用方法:
my $remote_fname = $driver->upload_file( $fname ); my $element = $driver->find_element( '//input[@]' ); $element->send_keys( $remote_fname );get_text
特定の要素のテキストを取得します。find_element() のラッパー
使用方法:
$text = $driver->get_text("//div[\@name='q']");get_body
本文全体の現在のテキストを取得します。代わりに生の HTML 全体が必要な場合は、get_page_sourceを参照してください。
使用方法:
$body_text = $driver->get_body();get_path
現在のブラウザーの場所のパス部分を取得します。
使用方法:
$path = $driver->get_path();get_user_agent
window.navigator.userAgent のブラウザーの値に従って、ユーザー エージェント文字列を取得する便利なメソッド。
使用方法:
$user_agent = $driver->get_user_agent()set_inner_window_size
現在のウィンドウを閉じて、新しいウィンドウで現在のページを再び開くことによって、内部ウィンドウのサイズを設定します。これは、ブラウザを使用してモバイル デバイスとしてモックする場合に便利です。インスタンス化中に inner_window_size ハッシュ キー オプションを設定すると、このサブルーチンが自動的に起動されます。
入力:
整数 - ウィンドウの高さとウィンドウの幅を表す整数
出力:
ブール値 - 成功または失敗
使用方法:
$driver->set_inner_window_size(640, 480);get_local_storage_item
指定されたキーで指定されたローカルストレージ項目の値を取得します。
入力1:
必須:文字列 - 処理されるキーの名前
出力:
文字列 - ローカルストレージ項目の値
使用方法:
$driver->get_local_storage_item('key')delete_local_storage_item
指定されたキーで指定されたローカルストレージアイテムの値を削除します。
入力1:
必須: 文字列 - 削除するキーの名前
使用方法:
$driver->delete_local_storage_item('key')関連項目
このモジュールに関連する詳細については、これらのモジュール/ Webサイトを参照してください。
- https://github.com/SeleniumHQ/selenium-メインのセレンRCプロジェクト
- https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol-「レガシー」Webドライバー仕様
- https://www.w3.org/TR/webdriver/-WC3 WebDriver3仕様
- https://github.com/teodesian/Selenium-Remote-Driver/wiki
- ブラウニー
- ワイト
バグ
バグトラッカーのウェブサイトhttps://github.com/teodesian/Selenium-Remote-Driver/issuesでバグや機能のリクエストを報告してください
バグまたはリクエストを送信するときは、バグまたは必要な機能を説明するテストファイルまたは既存のテストファイルへのパッチを含めてください。
著者
現在のメンテナ:
- ダニエルゲンペソー<gempesaw@gmail.com>
- EmmanuelPeroumalnaïk<peroumalnaik.emmanuel@gmail.com>
以前のメンテナ:
- ルーククロス<cpan@5thplane.com>
- マーク・ストスバーグ<mark@stosberg.com>
原作者:
- Aditya Ivaturi <ivaturi@gmail.com>
寄稿者
- アレン・ルー<allen@alew.org>
- A.MacLeay <a.macleay@gmail.com>
- Andy Jack <andyjack@users.noreply.github.com>
- Andy Jack <github@veracity.ca>
- Bas Bloemsaat <bas@bloemsaat.com>
- ブレイクGH <blake@mobiusconsortium.org>
- ブライアンホラク<brianh@zoovy.com>
- チャールズハウズ<charles.howes@globalrelay.net>
- Chris Davies <FMQA@users.noreply.github.com>
- ダニエル・ファックレル<dfackrell@bluehost.com>
- デイブ・ロルスキー<autarch@urth.org>
- Dmitry Karasik <dmitry@karasik.eu.org>
- ダグベル<doug@preaction.me>
- ディラン・ストレブ<dylan.streb@oneil.com>
- エリック・ジョンソン<eric.git@iijo.org>
- ガボール・ザボ<gabor@szabgab.com>
- ジョージS.ボー<george.b@cpanel.net>
- ゲルハルト・ユングワース<gjungwirth@sipwise.com>
- ゴードンチャイルド<gordon@gordonchild.com>
- GreatFlamingFoo <greatflamingfoo@gmail.com>
- Ivan Kurmanov <duraley@gmail.com>
- ジョーヒグトン<draxil@gmail.com>
- Jon Hermansen <jon.hermansen@gmail.com>
- 菅間圭太<sugama@jamadam.com>
- ケン・スワンソン<kswanson@genome.wustl.edu>
- lembark <lembark@wrkhors.com>
- Luke Closs <lukec@users.noreply.github.com>
- マルティン・ギュンナー<martin.gruner@otrs.com>
- Matthew Spahr <matthew.spahr@cpanel.net>
- Max O'Cull <maxattax97@gmail.com>
- Michael Prokop <mprokop@sipwise.com>
- mk654321 <kosmichal@gmail.com>
- Peter Mottram(SysPete)<peter@sysnix.com>
- フィルカニア<phil@vivox.com>
- Phil Mitchell <phil.mitchell@pobox.com>
- Prateek Goyal <prateek.goyal5@gmail.com>
- リチャード・サイラー<richard@weltraumpflege.org>
- ロバート・アッター<utter.robert@gmail.com>
- ルジェ<rouzier@gmail.com>
- 辰巳哲也<ttatsumi@ra2.so-net.ne.jp>
- Tod Hagan <42418406+tod222@users.noreply.github.com>
- トム・ヒューキンス<tom@eborcom.com>
- Vangelis Katsikaros <vangelis@adzuna.com>
- ヴァンゲリスカチカロス<vkatsikaros@gmail.com>
- Vishwanath Janmanchi <jvishwanath@gmail.com>
- ViťasStrádal<vitas@matfyz.cz>
- イヴ・ラヴォワ<ylavoie@yveslavoie.com>
著作権とライセンス
Copyright(c)2010-2011 Aditya Ivaturi、Gordon Child
Copyright(c)2014-2017 Daniel Gempesaw
Apacheライセンスバージョン2.0(「ライセンス」)に基づいてライセンス供与されます。ライセンスに準拠する場合を除き、このファイルを使用することはできません。ライセンスのコピーは、次のURLで入手できます。
http://www.apache.org/licenses/LICENSE-2.0
適用法によって要求されるか、書面で合意されない限り、ライセンスに基づいて配布されるソフトウェアは、明示または黙示を問わず、いかなる種類の保証または条件もなしに、「現状有姿」で配布されます。ライセンスに基づく許可と制限を規定する特定の言語については、ライセンスを参照してください。
業務に役立つPerl
Perlテキスト処理のエッセンス
PerlでポータブルなLinuxファイル管理入門
ITエンジニアの求人情報など
ITエンジニアの求人情報・Webサービス・ソフトウェア・スクールなどの情報。システム開発のお問い合わせ