Ручка Selenium с черствым элементом в петле - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть такой интерфейс:

enter image description here

Мне нужно выбрать каждое вложение и щелкнуть, чтобы загрузить или удалить.

Для загрузки:

// get the list of radio buttons
List<WebElement> attachments = driver().findElements(By.className("select-attachment"));
for (WebElement attachment : attachments) {
    attachment.click();
    driver().findElement(By.className("download-attachment")).click();   
}

Это работает нормально, вложения будут щелкаться и загружаться.

Но я столкнулся с проблемой детального теста. Потому что, когда я нажимаю кнопку «Удалить», появляется диалоговое окно Alert с вопросом «Ты уверен, бла», после того, как я принимаю это диалоговое окно, я получаю StaleElementReferenceException

Удалить:

// get the list of radio buttons
List<WebElement> attachments = driver().findElements(By.className("select-attachment"));
for (WebElement attachment : attachments) {
    attachment.click();
    driver().findElement(By.className("delete-attachment")).click();
    Alert alert = alert().get();        
    alert.accept();
}

Это отлично работает для первого вложения, но после того, как я принимаю Alert, элемент attachement больше не присоединяется к DOM, поэтому, когда он переходит ко второй радиокнопке, я получаю StaleElementReferenceException .

Я знаю, что с элементом Stale мы должны findElement снова. Но так как у меня есть список в for l oop, я не знаю, как с ним справиться.

Как я могу по-прежнему использовать for l oop и иметь возможность обрабатывать элемент Stale

...