Я могу получить содержимое элемента, когда я жду, используя sleep (), но не явно ждать - PullRequest
2 голосов
/ 28 мая 2019

Я пытаюсь получить содержимое элемента.Я реализовал явное ожидание в 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 : 

Код с sleep ():

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

Я не получу значение, если использую также неявное ожидание.Рекомендуется не использовать сон ().Использование явного ожидания всегда является лучшей практикой.Почему я не получаю содержимое элемента с помощью явного ожидания?

Ответы [ 3 ]

1 голос
/ 28 мая 2019

Соответствующий 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"));
    
0 голосов
/ 28 мая 2019

Можете ли вы попробовать?

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);
0 голосов
/ 28 мая 2019

Какую ошибку вы получаете?Кажется, что элемент не загружается должным образом.Могут происходить некоторые анимации, такие как закрытие модального всплывающего окна, загрузка таблиц и т. Д. Обычно можно ставить спящие режимы, если вы знаете, сколько времени занимает анимация такого типа.

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

FluentWait:

Wait<WebDriver> fluentWait = new FluentWait<>(driver)
    .withTimeout(Duration.ofSeconds(timeout))
    .pollingEvery(Duration.ofMillis(500))
    .ignoring(NoSuchElementException.class)
    .ignoring(StaleElementReferenceException.class);
...