gebを利用して、いくつかのカスタムJavaSelenium拡張機能を置き換えようとしています。クラウド(つまりSauceLabs )でグリッドを利用しようとすると、少しレンガの壁にぶつかりました。テストが完了したら、テストが失敗したか成功したかを示す更新を送り返すと便利です。これを利用するには、RemoteWebDriverインスタンスのsessionIdが必要です。これはカスタムReporterで取得できますが、このインターフェイスで成功したかどうかを判断できません。GebReportingSpecを拡張しているので、成功または失敗を追跡するためのカスタムJunitルールを持つ独自のカスタムバージョンを作成しようとしました。
public class TestSuccess extends TestWatcher {
boolean success;
String message;
@Override
protected void starting(Description d) {
message = d.getMethodName();
}
@Override
protected void succeeded(final Description description) {
System.out.println("Test Success [succeeded] " + description);
this.success = true;
}
@Override
protected void failed(final Throwable e, final Description description) {
System.out.println("Test Success [failed] " + description);
this.success = false;
}
public boolean isSuccess() {
return success;
}
@Override
public String toString() {
return message + " success: <" + success + ">.";
}
}
次に、それをCustomReportingSpecに追加しました。
class CustomReportingSpec extends GebReportingSpec {
/* I also tried creating this as a RuleChain with:
* @Rule TestRule chain = RuleChain.outerRule(
super._gebReportingSpecTestName).around(new TestSuccess());
* however, this results in a NPE. Placing the super rule in the around
* still results in a NPE.
*/
@Rule public TestSuccess _gebTestSuccesswatcher = new TestSuccess();
// I never see this called
void report() {
System.out.println("Custom Reporting Spec: " + _gebTestSuccesswatcher + "\t")
super.report()
}
}
また、カスタムレポーターでこれを設定しようとしました。
public CustomReporter extends ScreenshotAndPageSourceReporter implements Reporter {
@Rule
public TestSuccess _gebTestSuccesswatcher = new TestSuccess();
@Override
public void writeReport(Browser browser, String label, File outputDir) {
System.out.println("Custom Reporter: " + _gebTestSuccesswatcher);
super.writeReport(browser, label, outputDir)
}
}
ただし、テストが失敗したかどうかに関係なく、ウォッチャーの成功メソッドが呼び出されているようです。これが私のサンプルテストです:
class OneOff extends CustomReportingSpec {
def "Check One off"() {
when:
go "http://www.google.com"
then:
1 == 2
}
}
そして出力:
Custom Reporter: null success: <false>.
Test Success [succeeded] Check One off(OneOff)
ご覧のとおり、この失敗したテストが完了すると、成功メソッドが呼び出されます。テストに合格するように変更した場合(つまり、1 == 1)、出力は次のようになります。
Custom Reporter: null success: <false>.
Test Success [succeeded] Check One off(OneOff)
このルールをカスタムレポーターで正しく機能させる方法はありますか?または、拡張機能でブラウザインスタンスを取得する方法はありますか?このガイドに従ってカスタムアノテーションとリスナーを作成しましたが、ブラウザオブジェクトにアクセスできません。ブラウザーの宣言に@Sharedを追加しようとしましたが、Geb構成の宣言をプルしていません。