Как разрешить элемент Stale при прохождении всех кнопок? - PullRequest
0 голосов
/ 23 мая 2018

В рамках более крупного теста я должен нажать определенную кнопку без назначенного идентификатора.После просмотра и опробования различных других решений на stackoverflow я подумал просто пройтись по всем кнопкам - а потом подумать о том, как выбрать его по отдельности и щелкнуть по нему.Вот код:

    List<WebElement> buttons = driver.findElements(By.cssSelector(".btn.btn-primary"));
    for (WebElement b:buttons) {
        System.out.println(b.getTagName());
        System.out.println(b.getText());
    }

Кнопка динамически генерируется с помощью Jquery.Настоящая веб-страница представляет собой только коллекцию ссылок .js.Вот код, который я получил от Inspect Element:

<div class="modal-footer">
    <button class="btn btn-primary" type="button" data-bb-handler="yes">Task Status</button>
    <button class="btn btn-primary" type="button" data-bb-handler="danger">Close</button>
</div>

На этой веб-странице в процессе находится более 20 кнопок (едва видимых 4-5 на данном этапе).В настоящее время есть всплывающее окно (фон исчезает) с двумя кнопками, как показано в разделе кода выше.

В селене, оно выдает StaleElementReferenceException: stale element reference: element is not attached to the page document в строке, которая говорит b.getTagName().

Не уверен, что может быть причиной этого.Уже попробовал: 1. Явно ждал 30 секунд.2. Селекторы XPath 3. Несколько раз опрашивать в цикле и блоки try-catch ... как упоминалось в других ответах.Получение того же исключения для всех возможных решений.

Что может быть причиной этого?

ps Не удается опубликовать снимок экрана, так как это корпоративное приложение.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Из документации :

Исключение ссылки на устаревший элемент выдается в одном из двух случаев, причем первое является более распространенным, чем второе:

  • Элемент был полностью удален.
  • Элемент больше не подключен к DOM.

Это общие причины, которые могут вызвать это исключение.

В вашем вопросе не так много информации, но, учитывая то, что вы написали, кажется, что вы:

  • получаете ссылки на все элементы с помощью css selector ". Btn.btn-primary"
  • , выполняющих некоторые операции (которые изменяют DOM)
  • и после попытки взаимодействия с предыдущими ссылками.

Если вы это сделаете, вам нужно переместить элементы driver.findElements(By.cssSelector(".btn.btn-primary")), когда вы пытаетесь получить тэг / текст.

0 голосов
/ 23 мая 2018

Один из обходных путей - поместить его в блок try-catch, перехватить исключение StaleElementReferenceException и ничего не делать.

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