2011-12-06 11 views
0

単一のイベントを返す代わりにfindEventWithStatus( "Comment"、 "Completed")を呼び出すと、getEvents()メソッドによって生成されたイベントのリスト全体が返されます。なぜこれはそうですか?該当するコードは以下の通りです。 Eventオブジェクトのメソッド不正な値を返す

定義: -

class Event { 
    String description 
    String date 
    String status 
    WebElement editEvent 
    WebElement deleteEvent 
} 

は、セレンを使用してHTMLテーブルからイベントを取得: -

def getEvents() { 
    def eventSize = driver.findElements(By.xpath('//div[@id[contains(.,"eventsReviewTable")]]/table/tbody/tr')).size() 
    def eventList = new ArrayList() 
    def event = new Event() 
    def x 
    for (y in 0..eventSize-1) { 
     x = (y+1).toString() 
     event.date = driver.findElement(By.xpath("//div[@id[contains(.,'eventsReviewTable')]]/table/tbody/tr["+ x + "]/td[1]/div/span")).getText() 
     event.description = driver.findElement(By.xpath("//div[@id[contains(.,'eventsReviewTable')]]/table/tbody/tr["+ x + "]/td[2]/div/span")).getText() 
     event.status = driver.findElement(By.xpath("//div[@id[contains(.,'eventsReviewTable')]]/table/tbody/tr["+ x + "]/td[4]/div/span")).getText() 
     event.editEvent = driver.findElement(By.xpath("//div[@id[contains(.,'eventsReviewTable')]]/table/tbody/tr["+ x + "]/td[6]/div/a[@id[contains(.,'editEventLink')]]")) 
     event.deleteEvent = driver.findElement(By.xpath("//div[@id[contains(.,'eventsReviewTable')]]/table/tbody/tr["+ x + "]/td[6]/div/a[@id[contains(.,'deleteEventLink')]]")) 
     eventList.add(event) 
     event = new Event() 
    } 
    return eventList 
} 

特定のステータスと説明してイベントを見つける: -

def findEventWithStatus(String desc, String status) { 
    def events = getEvents() 
    events.each() { 
     if(it.description == desc && it.status == status) { 
      return it 
     } 
    } 
} 

答えて

1

return itが問題です。 0メソッドは、findEventWithStatusメソッドから戻るのではなく、event.eachに渡されたクロージャから戻っています。したがって、eachメソッドは実際には何も実行していません。eachは、呼び出されたコレクションを返します。から最後に返された値はeventsです。events.each { ... }はそのメソッドの最後のステートメントです。それがあまりにも混乱しないheheであったことを願っています。

とにかく、それは代わりにeachforステートメントを使用して固定することができ、しかし、あなたがオブジェクトを検索すると、find方法ははるかに良い仕事します:

def findEventWithStatus(String desc, String status) { 
    getEvents().find { it.description == desc && it.status == status } 
} 
+0

は夢のように働きました。ありがとう。 –

関連する問題