2014-10-15 6 views
0

У меня возникли проблемы с обнаружением всплывающего окна в приложении для Android. Сценарий следующий:Проверка Selendroid, если отображается всплывающая ошибка

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

private boolean checkErrorInesperado() { 
    try { 
     //clicks on desired element 
     utils.click(EMicroposVentanasErrores.BOTON_ACEPTAR); 
     return true; 
    } catch (NoSuchElementException ex) { 
     //do nothing it's expected 
     return false; 
    } 
} 

private boolean isElementPresent() { 
    return (driver.findElements(By.id("foo")).size() > 0) ? true : false; 
} 

Но ни один из вышеперечисленных не работают, когда я запустить тест, иногда застревает проверяющие. Любая помощь будет оценена по достоинству.

ответ

0

Я не уверен, что я точно знаю, в чем проблема, поскольку вы спрашиваете о том, отображается ли всплывающая ошибка, но тогда вы, кажется, тестируете исключение NoSuchElementException, которое не должно вызывать всплывающее окно, (поскольку это ошибка в программе Java, а не в браузере). Если вам действительно нужно проверить для всплывающих предупреждений, это работает для меня:

private Alert getAlert() { 
    return ExpectedConditions.alertIsPresent().apply(driver); 
} 

Этот метод возвращает предупреждение, а «водитель» здесь относится к реализации интерфейса WebDriver таким же образом, что вы» в ваших примерах.

Вы можете использовать следующий метод, чтобы увидеть, если тревога была поднята:

private boolean isAlertPresent() { 
    return ExpectedConditions.alertIsPresent().apply(driver) != null; 
} 

Ниже метод, когда прошел оповещение (например, от первого способа, показанного выше), будет возвращать сообщение начеку в :

private String getAlertText(Alert alert) { 
    return alert.getText(); 
} 

Однако, иногда просто заказав Селен нажать на объект, который он не думает, что существует заставит его поднять исключение до оповещения может быть зарегистрирован. Если вы столкнулись с этой проблемой, то следующий может показаться, как грязное решение, но он работал для меня:

private void clickAndCheckAlerts() { 
    try { 

     // (put code for clicking a component here) 

     // Optionally you may want make the thread sleep for a little while 
     // since alerts may not pop up immediately 
     Thread.sleep(SLEEP_TIME); 

    } catch (UnhandledAlertException e) { 
     // Make the following method check for alerts and log their text 
     checkForAlertsAndLogAlertText(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Это, вероятно, не самый полированной или правильный способ справиться с этой ситуацией, так что если кто-нибудь знают лучший способ сообщите нам.