Я пытаюсь получить содержимое элемента. Я реализовал явное ожидание 20 секунд перед заявлением о получении контента. Но я не могу получить содержимое. Я могу получить содержимое элемента, если использую sleep()
в течение 2 секунд. Код, который я пробовал:
WebDriverWait wait1 = new WebDriverWait(driver,20);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("XPath")));
String value = driver.findElement(By.xpath("xpath")).getAttribute("text-content");
System.out.println("Value is : " + value);
Output - Value is :
Код со сном():
WebDriverWait wait1 = new WebDriverWait(driver,20);
Thread.sleep(2000);
String value = driver.findElement(By.xpath("xpath")).getAttribute("text-content");
System.out.println("Value is : " + value);
Output - Value is : $0.00
Я не получаю значение, если я также использую неявное ожидание. Рекомендуется не использовать sleep(). Использование явного ожидания всегда является лучшей практикой. Почему я не получаю содержимое элемента, используя явное ожидание?
Можете поделиться HTML-кодом?
не работает с присутствияOfElementLocation.
Какую ошибку вы получаете? Кажется, что элемент не загружается должным образом. Могут быть некоторые анимации, такие как закрытие всплывающего окна, загрузка таблицы и т. д. Обычно можно поставить сон, если вы знаете, сколько времени занимают такие виды анимации.
Вы также можете попробовать fluentwait, но если есть анимация, вы все равно можете получить исключения, такие как драйвер, который не может щелкнуть элемент.
Свободное ожидание:
Wait<WebDriver> fluentWait = new FluentWait<>(driver)
.withTimeout(Duration.ofSeconds(timeout))
.pollingEvery(Duration.ofMillis(500))
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class);
Можете ли вы попробовать:
Wait<WebDriver> wait = new FluentWait<WebDriver>((WebDriver) driver).withTimeout(20, TimeUnit.SECONDS).pollingEvery(1, TimeUnit.SECONDS);
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("XPath"))));
String value = driver.findElement(By.xpath("xpath")).getAttribute("text-content");
System.out.println("Value is : " + value);
Соответствующий HTML помог бы нам лучше отладить проблему. Однако, поскольку желаемый текст содержит символ $, лучшим подходом будет создание WebDriverWait для ожидание проверки наличия данного текста в элементе, и вы можете использовать одно из следующих решений:
textToBePresentInElementLocated
:
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("xpath"), "$")).getAttribute("text-content"));
textToBePresentInElementValue
:
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.textToBePresentInElementValue(By.xpath("xpath"), "$")).getAttribute("text-content"));
«textToBePresentInElementLocation» сработало. "textToBePresentInElementValue" - нет.
Попробуйте использовать присутсвиеэлементлокатед вместо видимостиофлементлокатед.