Selenium は、ブラウザの自動化をサポートすることを目的としたさまざまなツールとライブラリのオープンソースの包括的なプロジェクトです。[ 3 ]テストスクリプト言語を学習する必要なく、ほとんどの最新のWeb ブラウザで機能テストを作成するための再生ツール (Selenium IDE) を提供します。[ 4 ]また、 JavaScript ( Node.js )、C#、Groovy、Java、Perl、PHP、Python、Ruby、Scalaなど、多くの一般的なプログラミング言語でテストを記述するためのテストドメイン固有言語(Selenese) も提供します。C ++ラッパーは git ページにありますが、何年も更新されていません。Selenium はWindows、Linux、macOSで動作します。Apache License 2.0の下でリリースされたオープンソース ソフトウェアです。
Seleniumは、もともと2004年にThoughtWorksの社内ツールとしてJason Hugginsによって開発されました。[ 5 ]その後、ThoughtWorksの他のプログラマーやテスターがHugginsに加わり、Paul Hammantがチームに参加して、後に「Selenium Remote Control」(RC)となる2番目の動作モードの開発を主導しました。このツールはその年にオープンソース化されました。
2005年、ダン・ファブリッチとネルソン・スプラウル(パット・ライトボディの協力を得て)は、Selenium-RCを後に最もよく知られるようになるものへと変貌させる一連のパッチを受け入れることを申し出た。同じ会議で、Seleniumプロジェクトの運営は委員会によって継続され、ハギンズとハマントがThoughtWorksの代表を務めることになった。[ 6 ]
2007年、ハギンズはGoogleに入社した。ジェニファー・ベバンらと共に、彼はSelenium RCの開発と安定化を続けた。同時期に、ThoughtWorksのサイモン・スチュワートはWebDriverと呼ばれる優れたブラウザ自動化ツールを開発した。2009年、Googleテスト自動化カンファレンスでの開発者間の会議の後、2つのプロジェクトを統合し、新しいプロジェクトをSelenium WebDriver、またはSelenium 2.0と呼ぶことが決定された。[ 7 ]
2008年、当時ThoughtWorksに所属していたPhilippe Hanrigouは、「Selenium Grid」を開発しました。これは、ローカルまたはリモートの任意の数のシステム上で複数のSeleniumテストを同時に実行できるハブを提供し、テスト実行時間を最小限に抑えます。Gridはオープンソースとして、Selenium RC向けのGoogleの社内/プライベートクラウドと同様の機能を提供しました。Pat Lightbodyは既に「HostedQA」用のプライベートクラウドを開発しており、後にそれをGomez, Inc.に売却しました。
セレニウムという名前は、ハギンズがメールの中で、マーキュリーという名前の競合他社をからかうジョークとして、水銀中毒はセレニウムという元素のサプリメントを摂取することで治せると言ったことに由来する。そのメールを受け取った他の人たちがその名前を取り上げ、広めた。[ 8 ]
Seleniumは複数のコンポーネントで構成されており、それぞれがWebアプリケーションのテスト自動化の開発を支援する特定の役割を担っています。[ 9 ]
Selenium IDE は、Selenium テスト用の完全な統合開発環境(IDE) です。FirefoxアドオンおよびChrome 拡張機能として実装されています。機能テストの記録、編集、デバッグが可能です。以前は Selenium Recorder として知られていました。Selenium-IDE は元々 Shinya Kasatani によって作成され、2006 年に Selenium プロジェクトに寄贈されました。Selenium IDE は 2018 年に積極的にメンテナンスされるようになりました。[ 10 ] [ 11 ] [ 12 ] [ 13 ]
スクリプトは自動的に記録され、手動で編集できるため、オートコンプリート機能やコマンドの素早い移動が可能です。スクリプトは、Selenium専用のテストスクリプト言語であるSeleneseで記録されます。Seleneseは、ブラウザでアクションを実行する(リンクをクリックする、オプションを選択するなど)コマンドや、結果ページからデータを取得するコマンドを提供します。Seleneseは、Webアプリケーションのテストで使用されるSeleniumコマンドを作成するための言語です。これらのコマンドは、UI要素のHTMLタグに合わせてカスタマイズされており、要素の存在確認を容易にします。また、Seleniumが実行すべき特定のアクションや操作を理解するための指針となります。
Seleneseでテストを作成する代わりに、さまざまなプログラミング言語でテストを作成することもできます。これらのテストは、SeleniumクライアントAPIのメソッドを呼び出すことでSeleniumと通信します。Seleniumは現在、Java、C#、Ruby、JavaScript、R、Python用のクライアントAPIを提供しています。
Selenium Remote Control (RC) は、 Javaで記述されたサーバーで、 HTTPを介してブラウザからのコマンドを受け付けます。RC を使用すると、Web アプリケーションの自動テストを任意のプログラミング言語で記述できるため、既存のユニット テスト フレームワークへの Selenium の統合が容易になります。テストの記述を容易にするため、Selenium プロジェクトは現在、PHP、Python、Ruby、.NET、Perl、Java用のクライアント ドライバを提供しています。Java ドライバは、 JavaScript ( Rhinoエンジン経由)でも使用できます。HTML テスト ケースを起動するには、Selenium RC サーバーのインスタンスが必要です。つまり、並列実行ごとにポートが異なる必要があります。ただし、Java/PHP テスト ケースでは、1 つの Selenium RC インスタンスを継続的に実行するだけで済みます。[ 14 ]
Selenium Remote Control は、Selenium の共同作成者として Jason と共にクレジットされている Paul Hammant によって設計された Driven Selenium または Selenium B のリファクタリングでした。オリジナルのバージョンは、Java、.NET、Python、または Ruby のテスト言語から、対象のブラウザのプロセスを直接起動していました。ワイヤ プロトコル (当時は「Selenese」と呼ばれていました) は、各言語ポートで再実装されました。Dan Fabulich と Nelson Sproul (Pat Lightbody の協力を得て) によるリファクタリングの後、駆動テスト スクリプトとブラウザの間に中間デーモン プロセスが設けられました。利点には、リモート ブラウザを駆動できることと、ますます増え続ける言語のセットにすべてのコード行を移植する必要性の減少が含まれていました。Selenium Remote Control は、 2006 年に Driven Selenium コードラインを完全に引き継ぎました。「Driven」/「B」および「RC」のブラウザ パターンはレスポンス/リクエストであり、これは後にCometとして知られるようになりました。
Selenium RC は、長年にわたり Selenium プロジェクト全体の主力テスト フレームワークとして機能してきました。Selenium RC は、ユーザーが好みのプログラミング言語を採用できる、最初にして最も重要な自動 Web テスト ツールです。[ 15 ] [ 16 ]
Selenium 2のリリースに伴い、Selenium RCは正式に非推奨となり、Selenium WebDriverが推奨されるようになりました。
Selenium の中核を成すのは Selenium WebDriver であり、これはブラウザ間で相互に動作する命令を記述するためのインターフェースです。これは Selenium RC の後継です。Selenium WebDriver はコマンド (Selenese またはクライアント API を介して送信) を受け取り、ブラウザに送信します。これは、ブラウザ固有のブラウザドライバによって実装され、ブラウザにコマンドを送信して結果を取得します。ほとんどのブラウザドライバは、実際にはブラウザアプリケーション ( Firefox、Google Chrome、Internet Explorer、Safari、Microsoft Edgeなど) を起動してアクセスします。また、ヘッドレスブラウザ HtmlUnit を使用してブラウザをシミュレートするHtmlUnitブラウザドライバもあります。Selenium 4 および Google Chrome バージョン 109 以降、ブラウザのネイティブ実装によってヘッドレスモードがサポートされており、Chrome はグラフィカルユーザーインターフェイスなしで動作しますが、レンダリングと実行動作は通常のモードと同一です。[ 17 ]
Selenium 1 ではテストを実行するために Selenium サーバーが必要でしたが、Selenium WebDriver ではテストを実行するために特別なサーバーは必要ありません。代わりに、WebDriver はブラウザ インスタンスを直接起動して制御します。ただし、Selenium Grid は WebDriver と組み合わせてリモート システムでテストを実行するために使用できます (下記参照)。可能な限り、WebDriver はブラウザ ベースの JavaScript コマンドではなく、ネイティブ オペレーティングシステム レベルの機能を使用してブラウザを操作します。これにより、セキュリティ制限を含む、ネイティブ コマンドと JavaScript コマンドの微妙な違いによる問題を回避できます。[ 18 ]
2012 年初頭の時点で、当時 Google に所属していた Simon Stewart (WebDriver の発明者) と Mozilla の David Burns は、 WebDriver をインターネット標準にするためにW3Cと交渉していました。2012 年 7 月に作業草案が公開され、2018 年 6 月に勧告が続きました。[ 19 ] Selenium WebDriver (Selenium 2.0) は、 JavaScript ( Node.js )、Python、Ruby、Java、Kotlin、C#で完全に実装され、サポートされています。2021 年現在、Selenium 4 はリリース候補です。[ 20 ]
from selenium.webdriver import Firefox from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.expected_conditions import presence_of_element_located from selenium.webdriver.remote.webelement import WebElementif __name__ == "__main__" : # この例では、Selenium WebDriver 3.13 以降と Firefox () をドライバとして使用する必要があります: wait : WebDriverWait = WebDriverWait ( driver , 10 ) driver . get ( " https://google.com/ncr " ) driver . find_element ( By . NAME , " q " ) . send_keys ( f " cheese { Keys . RETURN } " ) first_result : WebElement = wait . until ( presence_of_element_located (( By . CSS_SELECTOR , "h3" ))) print ( first_result . get_attribute ( "textContent" ))パッケージorg.wikipedia.examples ;import java.time.Duration ;import org.openqa.selenium.By ; import org.openqa.selenium.Keys ; import org.openqa.selenium.WebDriver ; import org.openqa.selenium.WebElement ; import org.openqa.selenium.firefox.FirefoxDriver ; import org.openqa.selenium.support.ui.WebDriverWait ; import static org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated ;public class HelloSelenium { public static void main ( String [] args ) { try ( WebDriver driver = new FirefoxDriver ()) { WebDriverWait wait = new WebDriverWait ( driver , Duration . ofSeconds ( 10 )) driver . get ( "https://google.com/ncr" ); driver . findElement ( By . name ( "q" )). sendKeys ( "cheese" + Keys . ENTER ); WebElement firstResult = wait . until ( presenceOfElementLocated ( By . cssSelector ( "h3" ))); System . out . println ( firstResult . getAttribute ( "textContent" )); driver . quit (); } catch ( Exception e ) { System . err . printf ( "Error caught: %s%n" , e . getMessage ()); } } }名前空間Wikipedia.Examples ;using OpenQA.Selenium ; using OpenQA.Selenium.Firefox ; using OpenQA.Selenium.Support.UI ;public class HelloSelenium { static void Main ( string [] args ) { using ( IWebDriver driver = new FirefoxDriver ()) { WebDriverWait wait = new ( driver , TimeSpan . FromSeconds ( 10 )); driver . Navigate (). GoToUrl ( "https://www.google.com/" ); driver . FindElement ( By . Name ( "q" )). SendKeys ( $"cheese{Keys.Enter}" ); wait . Until ( webDriver => webDriver . FindElement ( By . CssSelector ( "h3" )). Displayed ); IWebElement firstResult = driver . FindElement ( By . CssSelector ( "h3" )); Console . WriteLine ( firstResult . GetAttribute ( "textContent" )); } } }Selenium Gridは、リモートマシン上で動作するWebブラウザインスタンスをテストで使用できるようにするサーバーです。Selenium Gridでは、1台のサーバーが中央ハブとして機能します。テストはハブに接続してブラウザインスタンスへのアクセス権を取得します。ハブには、ブラウザインスタンス(WebDriverノード)へのアクセスを提供するサーバーのリストがあり、テストはこれらのインスタンスを使用できます。Selenium Gridを使用すると、複数のマシンでテストを並列実行したり、異なるブラウザバージョンやブラウザ構成を(個々のテストごとではなく)一元的に管理したりできます。
リモートのブラウザインスタンスでテストを実行できる機能は、テストの負荷を複数のマシンに分散したり、異なるプラットフォームやオペレーティングシステムで動作するブラウザでテストを実行したりするのに役立ちます。後者は、テストに使用するすべてのブラウザが同じプラットフォームで動作しない場合に特に役立ちます。[ 21 ]
という名前は、ハギンズが市場に出回っているテストツールに不満を持ち、Mercury Interactive QuickTest Professional商用テストソフトウェアの代替品として製品を位置づける名前を探していたことから付けられた。ハギンズの説明によると、セレンのミネラルサプリメントが水銀中毒の治療に効果があることから、Seleniumという名前が選ばれた。
{{cite web}}:|last=一般的な名前を持っています (ヘルプ)