Похоже, что у кого-то здесь был такой же вопрос, как и у вас: Как проверить, существует ли оповещение с помощью WebDriver?
Если вы запускаете driver.switch_to.alert
, когда оповещение фактически не присутствует, вы получите NoAlertPresentException
.Итак, основная идея состоит в том, чтобы написать метод с блоком try / catch, который пытается driver.switch_to.alert
и возвращает true или false в зависимости от наличия исключения.
Вот пример:
public boolean doesAlertExist()
{
try
{
driver.switch_to.alert();
return true;
}
catch (NoAlertPresentException e)
{
return false;
}
}
Что касается проблемы с синхронизацией (предупреждение появляется каждые 15 минут или около того) - вы можете попробовать написать метод-обертку для driver.findElement()
и element.click()
, который неявно проверяет наличие предупреждения.Конкретные подробности о методе будут зависеть от проекта, но вот пример чего-то простого:
public IWebElement findElementWrapped(By by)
{
if (doesAlertExist())
{
driver.switch_to.alert().accept(); // accept the alert
return driver.findElement(by); // use selenium's standard findElement
}
else
{
// no alert exists, just find the element
return driver.findElement(by);
}
}
С помощью этого кода вы можете проверять предупреждение каждый раз, когда пытаетесь найти элемент на странице,но вы должны написать строку кода только один раз.Вы можете использовать этот метод в действии так:
// check for alert, accept alert if it exists, get the desired web element
IWebElement myElement = driver.findElementWrapped(by);