Selenium: дождаться изменения значения атрибута - PullRequest
0 голосов
/ 29 августа 2018

У меня есть изображение на веб-странице, чей src изменяется через некоторое время, может быть два возможных значения после изменения src (время может меняться) img_src_success или img_src_failed

Я добавил код ниже, чтобы дождаться изменения src, но он не работает и выдает ошибку.

 WebDriverWait wait = new WebDriverWait(driver, 120);
 wait.until(ExpectedConditions.attributeToBe(image_src, "src",img_src_success );  

где image_src = WebElement
src = атрибут
img_src_success = Строковое значение "/src/image/success.png" img_src_running = строковое значение для "/src/image/failed.png""

Код выше дает ошибку

org.openqa.selenium.StaleElementReferenceException: устаревший элемент ссылка: элемент не прикреплен к странице документа.

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

1 Ответ

0 голосов
/ 29 августа 2018

StaleElementException выбрасывается, когда элемент удален или отсоединен от DOM. Повторное выполнение findElement может решить проблему. Существует вариант ExpectedConditions.attributeToBe, который принимает локатор By. Использование этого гарантирует, что элемент извлекается каждый раз перед проверкой, и может решить проблему.

Вы можете использовать wait.until со своим собственным ExpectedCondition, который может извлекать элемент каждый раз, а также проверять StaleElementReferenceException. Примерно так:

    wait.until(new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver input) {
            try {
                WebElement deployed_row = Report_id
                        .findElement(By.xpath("//div[(@class = 'gridxRow') and (@rowindex = '0')]"));
                WebElement table = deployed_row.findElement(By.className("gridxRowTable"));
                WebElement image_src = table.findElement(By.xpath("//tbody/tr/td[2]/div/div/span/img"));
                return image_src.getAttribute("src").equals(img_src_success);
            } catch (StaleElementReferenceException e) {
                return false;
            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...