Selenium 2.30/31: падение после закрытия алерта
#1
Отправлено 28 февраля 2013 - 13:15
assertTrue(closeAlertAndGetItsText(driver).matches("^Do you really want to delete these records[\\s\\S]$"));
появляется NoAlertPresentException
в detailMessage "No JavaScript modal dialog is open (WARNING: The server did not provide any stacktrace information)"
Какая еще информация может помочь?
#2
Отправлено 28 февраля 2013 - 13:45
try {
assertTrue(closeAlertAndGetItsText(driver).matches("^Do you really want to delete these records[\\s\\S]$"));
} catch (NoAlertPresentException e) {}
но в Selenium 2.29 все работает и исключение не появляется, что изменилось?
#3
Отправлено 28 февраля 2013 - 19:03
alert.getText() теперь выбрасывает исключение NoAlertPresentException, если alert уже закрыт (раньше так было реализовано только в python и .Net, теперь так же работает в Java и Ruby)
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#4
Отправлено 28 февраля 2013 - 19:07
private String closeAlertAndGetItsText() { try { Alert alert = driver.switchTo().alert(); String alertText = alert.getText(); if (acceptNextAlert) { alert.accept(); } else { alert.dismiss(); } return alertText; } finally { acceptNextAlert = true; } }
К сожалению, новые релизы Selenium IDE выходят реже, чем релизы WebDriver, поэтому пока код генерируется ошибочный. В следующей версии Selenium IDE это уже будет исправлено.
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#5
Отправлено 01 марта 2013 - 06:52
#6
Отправлено 02 марта 2013 - 15:41
Ага, я понял -- это исправили баг :)
alert.getText() теперь выбрасывает исключение NoAlertPresentException, если alert уже закрыт (раньше так было реализовано только в python и .Net, теперь так же работает в Java и Ruby)
Спасибо вам, у меня были методы, которые вначале обрабатывали алерт а потом получали текст и с 2.30 версии тоже такие тесты стали падать.
#7
Отправлено 23 июля 2013 - 09:01
if (driver.getPageSource().contains("Текст 1"))
{try { assertTrue(closeAlertAndGetItsText().matches("Текст 1"));
}catch (NoAlertPresentException e){}
TimeUnit.SECONDS.sleep(3);
}
else { if (driver.getPageSource().contains("Текст 2"))
{try { assertTrue(closeAlertAndGetItsText().matches("Текст 2"));
}catch (NoAlertPresentException e){}
TimeUnit.SECONDS.sleep(3);
}
}
этот метод не работает, какую функцию можно использовать, чтоб проверить текст в сообщении?
#8
Отправлено 23 июля 2013 - 09:47
Может, попробовать контейн или эквиваил, вместо matches?а не подскажите как постоить условие, которое проверяет текст в сообщении, и в соответствии с ним нажимает кнопку?
этот метод не работает, какую функцию можно использовать, чтоб проверить текст в сообщении?
#9
Отправлено 23 июля 2013 - 09:53
Какое обилие фигурных скобок! Да ещё без форматирования! /> />а не подскажите как постоить условие, которое проверяет текст в сообщении, и в соответствии с ним нажимает кнопку?
if (driver.getPageSource().contains("Текст 1"))
{try { assertTrue(closeAlertAndGetItsText().matches("Текст 1"));
}catch (NoAlertPresentException e){}
TimeUnit.SECONDS.sleep(3);
}
else { if (driver.getPageSource().contains("Текст 2"))
{try { assertTrue(closeAlertAndGetItsText().matches("Текст 2"));
}catch (NoAlertPresentException e){}
TimeUnit.SECONDS.sleep(3);
}
}
этот метод не работает, какую функцию можно использовать, чтоб проверить текст в сообщении?
А если попробовать вот так:
Alert alert = driver.switchTo().alert(); try { if (alert.getText().toLowerCase().contains("")) { //что надо сделать? alert.close(); } else { //что надо сделать? alert.close(); } } catch (NoAlertPresentException e){ TimeUnit.SECONDS.sleep(3); // а чего так много? }
#10
Отправлено 23 июля 2013 - 12:08
Простите, пишу впервыеКакое обилие фигурных скобок! Да ещё без форматирования!
Alert alert = driver.switchTo().alert(); try { if (alert.getText().toLowerCase().contains("Текст 1")) { assertTrue(closeAlertAndGetItsText().matches("Текст 1")); alert.dismiss(); } else { if (alert.getText().toLowerCase().contains("Текст 2")) { assertTrue(closeAlertAndGetItsText().matches("Текст 2")); } alert.dismiss(); } }catch (NoAlertPresentException e){}Работает, спасибо большое)))
#11
Отправлено 23 июля 2013 - 12:54
Простите, хочу обратить Ваше пристальное внимание на метод ".toLowerCase()".Простите, пишу впервые
Alert alert = driver.switchTo().alert(); try { if (alert.getText().toLowerCase().contains("Текст 1")) { assertTrue(closeAlertAndGetItsText().matches("Текст 1")); alert.dismiss(); } else { if (alert.getText().toLowerCase().contains("Текст 2")) { assertTrue(closeAlertAndGetItsText().matches("Текст 2")); } alert.dismiss(); } }catch (NoAlertPresentException e){}Работает, спасибо большое)))
Есть подозрение, что Ваш код работает всё же не совсем так, как должен был бы.
И опять лишние фигурные скобки усложняют чтение.
1) Зачем Вам "else if" ? Конструкция "else if" подразумевает наличие простого else (что делать, если ни одно из предыдущих условий не сработало?)
2) Может ли алерт содержать другой текст, отличный от "Текст 1" и "Текст 2"?
3) Зачем матчить содержимое алерта по фразе, если условие IF уже пропускает только те алерты, которые содержат необходимую фразу?
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных