Как проверить, открыта ли правильная страница в selendroid

Я новичок в selendroid и пишу тестовый пример для своего приложения.

У меня есть страница входа, которая отображается только в том случае, если пользователь не вошел в систему. Я могу выполнить тест в первый раз и успешно войти в систему. Я установил флаг noClearData в значение true, чтобы иметь данные для дальнейшего процесса.

Поскольку я уже вошел в систему, домашняя страница открывается, когда я запускаю тест во второй раз, но код пытается получить элемент по идентификатору «email» и выдает исключение

    org.openqa.selenium.NoSuchElementException: Element was not found.
    io.selendroid.exceptions.NoSuchElementException: Element was not found.
        at io.selendroid.server.handler.FindElement.handle(FindElement.java:58)
        at io.selendroid.server.AndroidServlet.handleRequest(AndroidServlet.java:301)
        at io.selendroid.server.BaseServlet.handleHttpRequest(BaseServlet.java:67)
        at io.selendroid.server.http.ServerHandler.channelRead(ServerHandler.java:50)
        .....

Я проверяю, отображается ли элемент с кодом ниже

    WebElement inputFieldEmail = driver.findElement(By.id("email"));
    inputFieldEmail .isDisplayed() 

но driver.findElement выдает исключение, и тестовый пример терпит неудачу. Я хочу проверить, что если страница входа открыта, выполняется только приведенный выше код.

Пожалуйста помоги.

Спасибо


person Kapil    schedule 25.05.2016    source источник
comment
Мой ответ ниже может быть совершенно неверным, в зависимости от того, что вы имеете в виду: я могу выполнить тест в первый раз и успешно войти в систему. Я установил флаг noClearData в значение true, чтобы иметь данные для дальнейшего процесса. Вы запускаете один и тот же тест несколько раз или это разные тесты в наборе тестов? Если это один и тот же тест, который работает в первый раз, а затем терпит неудачу во второй раз, вам, вероятно, следует просто очистить данные. Что вы надеетесь получить, сохраняя данные между тестами?   -  person anonygoose    schedule 26.05.2016
comment
Привет anonygoose, Спасибо за ваш ответ. Приложение загружает некоторые данные с сервера, когда пользователь входит в приложение. Я не хочу, чтобы тестовые примеры загружали его каждый раз, когда мы запускаем тестовый пример. Я запускал один тестовый пример несколько раз, но теперь я создал разные тестовые примеры, чтобы все можно было запускать на ходу, и все работало нормально.   -  person Kapil    schedule 27.05.2016
comment
Я бы сделал проверку количества элементов. int listsize = driver.findelements((By.id(email)).size; И после этого я бы сделал оператор if. If (listsize (size == 0){ Сделайте что-нибудь здесь} else { Сделайте что-нибудь еще}   -  person Madis Kangro    schedule 06.06.2016


Ответы (1)


Написание тестов, когда вы не уверены на 100%, с чего они будут начинаться, может быть чем-то вроде минного поля.

Если вы действительно хотите это сделать, вы можете окружить свой findElement с помощью try/catch.

    try {
        WebElement inputFieldEmail = driver.findElement(By.id("email"));
    } catch(org.openqa.selenium.NoSuchElementException e) {
        // However you want to handle this
    }

Таким образом, вы можете использовать попытку для обработки логики, когда она находит поле электронной почты, и уловку, когда это не так.

В качестве альтернативы, если вы используете среду тестирования, такую ​​​​как JUnit или TestNG, вы можете использовать аннотацию @BeforeClass, если вы хотите войти в систему только один раз во время всего этого набора тестов.

т.е. используйте аннотированный метод @BeforeClass для входа в систему, а затем используйте либо @Before, либо @After для сброса до известной точки в вашем приложении в начале или в конце каждого тестового примера.

person anonygoose    schedule 25.05.2016
comment
Спасибо за ответ. Да, я сделал то же самое, окружив код в блоке try catch, и это позволяет мне выполнять следующие тесты. Но все равно показывает ошибки в логах. Но это не то, чего я ожидал. +1 за ваш ответ. - person Kapil; 27.05.2016