2

要素の順序付けられていないリストを表す geb モジュールを作成しようとしています。テーブルでこれを行う方法の例を見てきましたが、それをUL->LI要素に変換するのに苦労しています。これが私がこれまでに持っているものです:

class CheckoutPage extends Page {

  static content = {
    cartItemList { $(".cart_items ul") }
    cartItem { i -> module CartItem,  cartItems[i] }
    cartItems(required: false) { cartItemList.find("li.item") }
  }
}

class CartItem extends Module {
  static content = {
    thumbnail { $("img.book_cover", it) }
    itemInfo { $("div.item_info", it) }
    bookTitle { itemInfo.find("h1").find("a").text() }
  }
}

私の仕様で次のことを行うと:

def "add an item to the cart"() {
   when:
   to CheckoutPage, productId: "10001"

   then:
   cartItems.size() == 1
   def cartItem = cartItems(0)
   cartItem.bookTitle == "Test Book Title 001"
}

次のエラーが表示されます。

geb.error.UnresolvablePropertyException: bookTitle を cartItems のコンテンツとして解決できません

ただし、cartItemこれを行うことができ、機能するため、DOM要素です。

cartItem.find("div.item_info").find("h1").find("a").text() == "Test Book Title 001"
4

3 に答える 3

3

このブログ投稿をチェックすることをお勧めします。探しているものをほぼ正確に概説します。

http://adhockery.blogspot.com/2010/11/modelling-repeating-structures-with-geb.html

そのブログ投稿を調べた後、これがあなたのページクラスについて思いついたものです:

class CheckoutPage extends Page {

  static content = {
    cartItemList { $(".cart_items ul") }
    cartItems(required: false) { 
      cartItemList.find("li.item").collect { item-> 
        module(CartItem, item)
      }
    }
  }
}

次に、モジュールは次のようになります。

class CartItem extends Module {
  static content = {
    thumbnail { $("img.book_cover") }
    itemInfo { $("div.item_info") }
    bookTitle { itemInfo.find("h1").find("a").text() }
  }
}
于 2013-04-15T14:12:57.227 に答える
1

コードにバグがあるようdef cartItem = cartItem(0)ですdef cartItem = cartItems(0)。また、ローカル変数とコンテンツ定義に同じ名前を使用しないようにしてください ( cartItem.

メソッドを使用してコンテンツ定義を簡素化できますmoduleList()

static content = {
    cartItemList { $(".cart_items ul") }
    cartItems { i -> moduleList CartItem, cartItemList.find("li.item"), i }
}

そしてあなたのテストで:

then:
cartItems.size() == 1 //here you use it to retrieve the full list
def item = cartItems(0) //here you use it to retrieve a single element
item.bookTitle == "Test Book Title 001"
于 2013-04-16T16:44:09.080 に答える