Драйвер Selenium chrome динамически добавляет атрибут в элемент - PullRequest
0 голосов
/ 01 августа 2020

Здравствуйте, я новичок в драйвере selenium chrome. Я очищаю веб-сайт электронной коммерции, где я очищаю все сведения о продуктах с домашней страницы, но на этой странице изображение продуктов загружается динамически (через 5-7 секунд после загрузки продуктов). исходный код выглядит следующим образом

<img alt="product1" class="image" />

через 5-7 секунд

<img alt="product1" class="image" src="product image url" />

Итак, я хочу очистить это изображение src значение атрибута.

Я пробовал ниже способ

    driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);

или

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

или

Thread.sleep(20000)

, но мне не удалось никому помочь мне, как получить значение атрибута image src?

Ответы [ 2 ]

0 голосов
/ 01 августа 2020

Попробуйте следующее:

WebElement image = new FluentWait<WebDriver>(driver)
        .withTimeout(Duration.of(10, ChronoUnit.SECONDS))
        .until(
                ExpectedConditions.presenceOfElementLocated(
                        By.xpath("//img[@alt='product1'][@src]")
                )
        );

Приведенный выше код означает, что официант будет опрашивать вашу DOM в течение 10 секунд, если ваша DOM не получит элемент, описанный в xpath. Эта [@src] часть xpath означает, что мы запрашиваем элемент, имеющий атрибут src, поэтому положительный результат не будет возвращен, если элементу не назначен обязательный атрибут.

0 голосов
/ 01 августа 2020

"FluentWait" Selenium - ваш друг

final WebElement imgWithSrc = new FluentWait<>(driver)
            .withTimeout(Duration.of(10_000, ChronoUnit.MILLIS))
            .pollingEvery(Duration.of(250, ChronoUnit.MILLIS))
            .ignoring(NoSuchElementException.class)
            .ignoring(StaleElementReferenceException.class)
            .ignoring(ScriptTimeoutException.class)
            .until(d -> {
                final WebElement imgElement = d.findElement(By.cssSelector("img.image"));
                if (StringUtils.isNotBlank(imgElement.getAttribute("src"))) {
                    return imgElement;
                }
                return null;
            });

Во второй строке вы видите макс. ожидание 10 с, с опросом каждые 250 мс (третья строка)

...