2015-01-14 2 views
1

У меня есть тестовый пример, где после создания элемента отображается уведомление, но это уведомление исчезает в течение 2-3 секунд.Как идентифицировать элемент уведомлений, которые исчезают в течение нескольких секунд?

Я хочу идентифицировать элемент для этого уведомления, но когда я пытаюсь проверить элемент для него в firebug, это фрагмент HTML быстро исчезает, поскольку само уведомление исчезает. Следовательно, я не мог идентифицировать элемент для этого и затруднился автоматизировать его.

Может ли кто-нибудь предложить, как бороться с такой ситуацией?

ответ

2

Так как вы говорите «Я тест case ", я думаю, вы тестируете свое приложение. Самый простой способ обойти вашу проблему - узнать ваше приложение. Даже если сторонняя библиотека предоставляет код уведомления, вы можете прочитать документ, чтобы узнать, можете ли вы увеличить задержку или вы можете прочитать исходный код, чтобы выяснить, как он создает элемент и где.

Если вышеописанное не удается, то если вы можете собрать последовательность операций в Selenium, которая вызывает уведомление, вы сможете получить сериализацию body достаточно быстро, чтобы вы могли изучить ее на досуге. Использование Selenium для Python, он будет идти:

print driver.execute_script("return document.body.outerHTML;") 

Я бы запустить приведенный выше код с переадресацией, чтобы сохранить вывод print заявления в файл, который я затем изучить на досуге. Вы можете сделать его уже, если хотите, получив outerHTML потомка body. Мне нравится иметь хороший контекст, чтобы я знал, где именно создается элемент. Я использовал библиотеки и конфигурации, которые создают такие уведомления, как дети body, и некоторые, которые ставят их как дочерние элементы других элементов.

+0

Спасибо Луи, ваш ответ очень полезен !!! – TDHM

0

Вы можете использовать ниже JAVA код в ждать 20 секунд до любого элемента с текстом появляется «Ваше уведомление» на странице:

try{ 
    WebDriverWait wait = new WebDriverWait(driver,20); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(),'Your notification here')]"))); 
}catch(Throwable e){ 
    System.err.println("Error while waiting for the notification to appear: "+ e.getMessage()); 
} 
+1

Проблема с OPs заключается в том, что он не может найти элемент, потому что он слишком быстро исчезает для него, чтобы указать xpath/cssSelector. Создание ожидания Selenium не изменит поведение приложения, чтобы помочь ему –

+0

Именно по этой причине я использовал вышеуказанный код. Он будет ждать, пока не появится элемент, содержащий текст, т. Е. Сообщение «Уведомление», вместо того, чтобы ждать уведомления, а не утверждать текст в нем. Надеюсь, вы его получите .. :) – Subh

+2

Стив Кроуфорд прав. Это не делает то, что спросил ОП. Кроме того, такой тест, который терпит неудачу, не дает много информации о том, что произошло с ошибкой. Неужели уведомление так и не появилось? Или что уведомление появилось, но с неожиданным сообщением? Мы не знаем. Если ОП обнаружит, как уведомление структурно появляется в DOM, OP может затем написать тест, который будет отличать эти два режима отказа. (И да, у меня были оба сбоя при тестировании реальных приложений.) – Louis

Смежные вопросы