2011-12-06 184 views
0

如果我調用findEventWithStatus(「Comment」,「Completed」)而不是返回單個事件,它將返回由getEvents()方法生成的整個事件列表。這是爲什麼?適用的代碼如下。事件對象的方法返回不正確的值

定義: -

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 itfindEventWithStatus方法正在從傳遞到event.each的封閉返回,而不是從findEventWithStatus方法返回。因此,each方法沒有做任何事情,並且由於each返回它被調用的集合,因此它返回events值,這是最後從findEventWithStatus返回的值,因爲events.each { ... }是該方法中的最後一條語句。我希望這不是太混亂,呵呵。

無論如何,它可以使用,而不是一個each聲明for是固定的,但是,當你正在尋找一個對象時,find方法將運行得更好:

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

工作就像一個夢。謝謝。 –