Как определить, является ли элемент устаревшим в Geb?

Я пытаюсь определить, не устарел ли модуль в Geb. То есть при использовании будет брошено: org.openqa.selenium.StaleElementReferenceException

Приведенный ниже код, кажется, работает, но я чувствую, что он чрезмерно хакерский (я просто вызываю любой произвольный метод для module (toString() казался достойным выбором) и проверяю, выдает ли он исключение устаревшего элемента.

static boolean isStale(Module module)
{
    boolean isStale = false
    try {
        module.toString() // arbitrary method call
    } catch (StaleElementReferenceException e) {
        isStale = true
    }
    return isStale
}

Есть ли более чистый способ сделать это?


person Zach Lysobey    schedule 04.06.2014    source источник
comment
Я просматривал эту ссылку: darrellgrainger.blogspot.ca/2012/06/staleelementexception.html это почти похоже на ваш подход. Я нашел эту ссылку из другого вопроса SO. Скажите, пожалуйста, почему он недостаточно чистый?   -  person Sharif Mamun    schedule 07.06.2014
comment
@SMAlMamun Я пришел к выводу, что это на самом деле лучший способ. Я просто надеялся, что может быть более чистый способ, потому что я не люблю прибегать к использованию исключений для управления потоком моего кода. Это должны быть исключительные обстоятельства, но это ожидаемо для того, для чего я его использую. Если вы хотите добавить ответ, подтверждающий, что это единственный подход, я поставлю вам галочку.   -  person Zach Lysobey    schedule 07.06.2014
comment
ха-ха, мои небольшие знания говорят, что это лучший подход. Я бы хотел, чтобы Питер пришел сюда и оставил еще один комментарий!   -  person Sharif Mamun    schedule 07.06.2014
comment
Не могли бы вы объяснить, почему вам нужно знать, устарел ли базовый элемент модуля? Каков ваш вариант использования? Я почти уверен, что есть лучший способ решить вашу проблему, чем сделать это. Тем более, что он использует исключения для управления потоком, как вы уже упоминали.   -  person erdi    schedule 07.06.2014
comment
@erdi очень разумный вопрос. Я на самом деле делаю это для того, чтобы проверить, изменилась ли страница. at средства проверки не будут работать, потому что эти страницы несколько произвольны и не могут разделять Page объекты. Вероятно, есть лучший способ, и я буду открыт для предложений.   -  person Zach Lysobey    schedule 08.06.2014


Ответы (1)


Если вы пытаетесь обнаружить изменения страницы, какими бы произвольными они ни были, я бы, вероятно, занялся этим наоборот - обнаруживая новый контент, а не устаревший контент. Во-первых, вам нужно найти что-то (элемент или состояние элемента), которое вы можете использовать в своей программе проверки at, чтобы определить, что новая страница «загрузилась». Затем вы должны выполнить действие по изменению страницы и обернуть проверку при проверке внутри вызова waitFor {}. Это должно быть более надежным, чем ваш текущий подход, особенно потому, что по умолчанию Geb не кэширует никаких элементов содержимого.

person erdi    schedule 13.06.2014