我正在尝试获取元素的内容。在获取内容声明之前,我已经实现了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
如果我也使用隐式等待,则无法获得该值。建议不要使用sleep()。使用显式等待始终是最佳实践。为什么我没有通过显式等待来获取元素的内容?
答案 0 :(得分:1)
相关的HTML可以帮助我们以更好的方式调试问题。但是,由于所需文本包含 $ 字符,因此一种更好的方法是诱使 WebDriverWait 进行期望,以检查元素中是否存在给定文本< / em>,则可以使用以下任一解决方案:
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"));
答案 1 :(得分:0)
您得到什么错误?似乎该元素无法正确加载。可能会发生一些动画,例如弹出窗口关闭,表格加载等。通常,如果您知道这些动画需要多长时间,就可以进入睡眠状态。
您也可以尝试fluentwait,但是如果正在进行动画,则可能仍然会出现异常,例如驱动程序无法单击某个元素。
FluentWait:
Wait<WebDriver> fluentWait = new FluentWait<>(driver)
.withTimeout(Duration.ofSeconds(timeout))
.pollingEvery(Duration.ofMillis(500))
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class);
答案 2 :(得分:0)
可以尝试一下吗?
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);