単一ページアクション:
(確認、拒否、撤回)それはあなたのコードの例を見ずに言うのは難しいですが、これを行うための一つの方法は、あなたの行動のためのメソッドを定義することです、あなたの中に簡単な方法として、 Pageクラス:
class ActionsPage extends Page {
static content = {
//Page content here
}
def confirm(){
//Code to perform confirm action on the page
}
def reject(){
//Code to perform reject action on the page
}
その後、あなた仕様のクラスであなたが
def "Test confirm action"(){
when: "we go to the actions pages"
to ActionsPage
and: "we perform a confirm action"
confirm()
then: "something happens"
//Code which checks the confirmation worked
}
を行うことができますゲブはGroovyのメソッドを使用していますので、これは動作します「confirm()」と呼ばれる現在のページ上のメソッドの名前を見つけるためのものが見つからず、そのコードを実行します。
複数のページアクション:
行動が複雑であり、いくつかのページに移動関与している場合、それがアクションを実行する必要があり、あなたのテストのための抽象基本クラスを作成するのが最善です:
//Not @Stepwise
abstract class BaseActionsSpec extends Specification {
//Note: don't use Spock when/then blocks in these methods as they are not feature methods
protected void confirm(){
//Code to perform multi-page action
}
protected void reject(){
//Code to perform multi-page action
}
}
その後、拡張クラス:
@Stepwise
class ConfirmActionSpec extends BaseActionsSpec{
def "Test confirm action"(){
when: "we go to the actions pages"
to ActionsPage
and: "we perform a confirm action"
confirm() //calls method in super class
then: "something happens"
//Code which checks the confirmation worked
}
}
ありがとうございました。実際には、これらのアクションはそれほど簡単ではありませんが、異なるWebページでのアクションの流れから構成されています。だからこそ私はそれらを別々の仕様として実装し、後で別の仕様にそれらを組み込む可能性を持っています。拡張機能を使用して仕様に新しい機能を追加することは可能ですか? – MantasG
このソリューションは単一ページのアクションにしか適していないので、私はあなたのために動作する別のソリューションを追加します – jk47
ちなみに、@Stepwiseアノテーションは継承をサポートしていません。そのため、スーパークラスサブクラスの機能に関して実行される順序は定義されていません。私はあなたがここで必要とする動作(独自のコードは申し訳ありませんが)を得るためにカスタムSpock拡張を書く必要がありました。私はちょうど私の答えに示されているように、機能の外にアクションコードを移動し、ヘルパーメソッドにすることをお勧めします。 – jk47