Почему мой цикл while не гаснет, когда элемент не отображается? - PullRequest
0 голосов
/ 14 июня 2019

Я автоматизировал тест на селен и c # для циклического просмотра страницы нумерации страниц, то есть следующей кнопки.Когда цикл начинается, он ловит первую следующую кнопку, которая является правильной, но затем он переходит на следующую страницу, где нет следующей кнопки, но цикл продолжается и выдает исключение

NoSuchElementException: нет такого элемента: Невозможно найти элемент: {"method": "xpath", "selector": "// button [@ class = 'vt-client-paged-list__page-button vt-client-paged-list - button-visible'] [text () = 'Next'] "}

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

while (_vechRep.btnNextDriver.Displayed && _vechRep.btnNextDriver.Enabled) {

    System.Threading.Thread.Sleep(2000);
    _vechRep.btnNextDriver.Click();
    System.Threading.Thread.Sleep(2000);
    expectedCount = expectedCount + _vechRep.noDriverRows.Count;

}

Он должен выйти из цикла, когда следующая кнопка не видна.

1 Ответ

2 голосов
/ 14 июня 2019

Цикл не работает, потому что для проверки условия необходимо проверить условие .

Состояния while:

while(_vechRep.btnNextDriver.Displayed && _vechRep.btnNextDriver.Enabled)

Это означает, что на каждой итерации он ищет существование _vechRep.btnNextDriver. Поскольку вы перешли на следующую страницу, она больше не существует; и таким образом вы ошибки. Цикл не может проверить .Displayed или .Enabled, потому что его там нет.

Вместо этого вам нужно изменить проверку цикла на наличие кнопки (или объекта, или что у вас есть). Код Java будет:

List<WebElement> things = getDriver().findElements(By.xpath("//button[@class='vt-client-paged-list__page-button vt-client-paged-list--button-visible'][text()='Next'"));
while(things.size() > 0) {
    // Do stuff
    things = getDriver().findElements(By.xpath("//button[@class='vt-client-paged-list__page-button vt-client-paged-list--button-visible'][text()='Next'"));
}

Как правило, перед циклом назначьте переменную, которая будет содержать массив WebElements (даже если вы ожидаете только один). Затем для условия цикла while проверьте, есть ли еще хотя бы один из них. Если есть, делай все, что тебе нужно. Затем, в качестве последнего утверждения в цикле, переназначьте тестовую переменную, чтобы пересчитать количество экземпляров. Если его больше нет, цикл while пока безопасно говорит, что на странице его нет, и переходим к следующему фрагменту кода.

Ключ в том, что .findElement() должен найти хотя бы один элемент, иначе он не работает. Plural .findElements() по-прежнему работает, даже если нет элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...