Метод, возвращающий неверное значение - PullRequest
0 голосов
/ 06 декабря 2011

Если я вызываю 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 Ответ

1 голос
/ 06 декабря 2011

Проблема в том, что return it из метода findEventWithStatus возвращается из замыкания, переданного в event.each, а не из метода findEventWithStatus.Таким образом, метод each ничего не делает на самом деле, и, поскольку each возвращает коллекцию, в которой он был вызван, он возвращает значение events, которое в конечном итоге возвращается из findEventWithStatus как events.each { ... } - последнее утверждение в этом методе.Надеюсь, это не слишком запутало, хе-хе.

В любом случае, это можно исправить с помощью оператора for вместо each, но, когда вы ищете объект, find метод будет работать намного лучше:

def findEventWithStatus(String desc, String status) {
    getEvents().find { it.description == desc && it.status == status }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...