コードエクスポート
はじめる
テストまたはテストスイートをWebDriverコードにエクスポートするには、テストまたはスイートを右クリックし、「エクスポート」を選択して、ターゲット言語を選択し、「エクスポート」をクリックします。
これにより、ターゲット言語のエクスポートされたコードを含むファイルがブラウザのダウンロードディレクトリに保存されます。
オリジントレーシングコードコメント
エクスポート時に、オリジントレーシングコードコメントを有効にするオプションのトグルがあります。
これにより、エクスポートされたファイルにインラインコードコメントが配置され、それを生成したSelenium IDEのテストステップに関する詳細が表示されます。
サポートされているエクスポート
現在、以下の言語とテストフレームワークへのエクスポートがサポートされています。
- C# NUnit
- Java JUnit
- JavaScript Mocha
- Python pytest
Seleniumの公式にサポートされているすべてのプログラミング言語バインディング(例:Java、JavaScript、C#、Python、Ruby)を、各言語の少なくとも1つのテストフレームワークでサポートすることを目指しています。
新しい言語や、既存の言語に対する新しいテストフレームワークの追加には、皆様からの貢献を歓迎いたします。方法については、貢献方法をご覧ください。
C# NUnit
C# NUnit用のエクスポートされたコードは、.NET Core、NUnit 3.11、および最新バージョンのSeleniumで動作するように構築されています。
NUnitで動作する新しいボイラープレートプロジェクトを作成するには、dotnet new
コマンドを使用します。
dotnet new nunit -n NUnit-Tests --framework netcoreapp2.0
次の.csproj
ファイルを使用すると、dotnet restore
コマンドを使用して、正しいパッケージとバージョンをインストールできます。
<!-- filename: example.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="nunit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
<PackageReference Include="Selenium.Support" Version="4.0.0-alpha03" />
<PackageReference Include="Selenium.WebDriver" Version="4.0.0-alpha03" />
</ItemGroup>
</Project>
> dotnet restore example.csproj
C# xUnit
C# xUnit用のエクスポートされたコードは、C#、xUnit、および最新バージョンのSeleniumで動作するように構築されています。
C# NUnitと同様に、dotnetツールでインストールし、これらの依存関係をインストールした後に実行できます(例:Install-Package Selenium.WebDriver
またはdotnet add package Selenium.WebDriver
のいずれかを使用)。
xUnitで動作する新しいボイラープレートプロジェクトを作成するには、dotnet new
コマンドを使用します。
> dotnet new xUnitTests
次の.csproj
ファイルを使用すると、dotnet restore
コマンドを使用して、正しいパッケージとバージョンをインストールできます。
<!-- filename: example.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
<PackageReference Include="Selenium.Support" Version="4.0.0-alpha03" />
<PackageReference Include="Selenium.WebDriver" Version="4.0.0-alpha03" />
</ItemGroup>
</Project>
> dotnet restore example.csproj
Java JUnit
Java JUnit用のエクスポートされたコードは、Java 8、JUnit 4.12、および最新バージョンのSeleniumで動作するように構築されています。
エクスポートされたJavaファイルを標準的なMavenディレクトリ構造に配置し、これらの依存関係をリストしたpom.xml
ファイルを使用して実行することができます。
開始の手助けとなるサンプルpom.xml
を以下に示します。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-ide-java-code-export</artifactId>
<version>1</version>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0-alpha-3</version>
</dependency>
</dependencies>
</project>
JavaScript Mocha
JavaScript Mocha用のエクスポートされたコードは、Node 10、Mocha 6.1.x、および最新バージョンのSeleniumで動作するように構築されています。
エクスポートされたJavaScriptファイルを取得し、これらの依存関係をインストールした後(例:npm install
)、実行することができます。
開始の手助けとなるサンプルpackage.json
を以下に示します。
{
"dependencies": {
"mocha": "^6.1.4",
"selenium-webdriver": "^4.0.0-alpha.3"
}
}
Python pytest
Python pytest用のエクスポートされたコードは、Python 3、pytest 4.6.x、および最新バージョンのSeleniumで動作するように構築されています。
エクスポートされたJavaScriptファイルを取得し、これらの依存関係をインストールした後(例:pip3 install
)、実行することができます。
開始の手助けとなるサンプルrequirements.txt
を以下に示します。
pytest == 4.6.3
selenium == 4.0.0a1
> pip3 install -r ./requirements.txt
Ruby RSpec
Ruby Rspec用のエクスポートされたコードは、Ruby 2.6.x、RSpec 3.9.x、および最新バージョンのSeleniumで動作するように構築されています。
Bundlerと次のGemfile
を使用することで、必要な依存関係をインストールできます。
# Gemfile
source 'https://rubygems.org'
gem 'selenium-webdriver'
gem 'rspec'
> gem install bunder
> bundle install
貢献方法
コードエクスポートは、貢献を容易にするためにモジュール方式で構築されました。
各言語とテストフレームワークには、エクスポートされるコードを含む独自のpackageがあります。各コードスニペットはSelenium IDEのコマンドにマッピングされ、これらのパッケージはそれぞれ、重い処理を行う基盤となる「コア」パッケージに依存しています。
新しい言語、または既に確立されている言語内の新しいテストフレームワークを作成する手順を以下に示します。
1. 新しいパッケージの作成
まず、既存の言語パッケージ(例:packages/code-export-java-junit
)をコピーし、名前を変更します(例:フォルダとpackage.json
ファイルの詳細)。そして、貢献したいターゲット言語とフレームワークに変更します(例:packages/code-export-ruby-rspec
など)。
次に、code-export
のpackage.json
に新しいパッケージを依存関係として追加します。
最後に、プロジェクトのルートからyarn
を実行し、yarn watch
を使用してプロジェクトをビルドします(ローカルビルドの詳細については、こちらをご覧ください)。
2. ロケーターとコマンドの更新
コードエクスポートの肝は、出力コードに変換される言語固有の文字列です。最も重要なのは、コマンドとロケーター戦略(例:「by」ルックアップの構文)です。
言語ごとに、各ファイルとその対応するテストファイルがあります。
packages/code-export-java-junit
でその例を確認できます。
新しいコマンドを宣言する際には、その出力を文字列として、またはインデントレベルを指定するオブジェクトとして指定できます。
code-exportには、出力されるコードのインデントを制御する整形ツールが組み込まれています。この構造は、コマンドの出力が冗長で明示的にしたい場合、またはコマンドが後続のコマンドのインデントレベルを変更する場合に役立ちます。
3. フックの作成
フックは、エクスポートされるコードの構造の大部分を占めます(例:スイート、テスト、およびセットアップ、ティアダウンなど、それらに含まれるものすべて)。また、プラグインがテストまたはスイートのさまざまな部分にコードをエクスポートできるようにするものです。
9つの異なるフックがあります。
afterAll
(すべてのテストが完了した後)afterEach
(各テストが完了した後 -afterAll
の前)beforeAll
(すべてのテストが実行される前)beforeEach
(各テストが実行される前 -beforeAll
の後)command
(プラグインによって追加された新しいコマンドのコードを出力する)dependency
(追加の言語依存関係を追加する)inEachBegin
(各テストにおいて、その開始時に)inEachEnd
(各テストにおいて、その終了時に)variable
(スイート全体で使用される新しい変数を宣言する)
フックの実装例は、こちらのpackages/code-export-java-junit
で確認できます。
4. 言語固有の属性の更新
各言語で、インデントするスペースの数、メソッド、テスト、スイートなどを宣言する方法など、いくつかの低レベルの詳細を指定する必要があります。
これの実装例は、こちらのpackages/code-export-java-junit
で確認できます。
5. 統合
他のすべてが準備できたら、UIで使用できるように接続する時間です。
これはpackages/code-export/src/index.js
で可能です。
availableLanguages
に自分の言語を追加する必要があります。
6. テストと調整
コードエクスポートのエンドツーエンドテストとして最適なのは、一連のテストをエクスポートし、期待どおりに実行されることを確認することです。
開発ビルドでは、シードテストにアクセスできます。これは、標準ライブラリコマンドのすべてが新しい言語で機能することを確認するための良い出発点です。
最終結果に自信が持てるまで、テスト、修正、そして再テストを繰り返します。
7. PRの提出
難しい部分は終わりました。あとはPRを提出するだけです。v3
ブランチに対して提出してください。