硒问题尝试使用 driver.findElement(By.xpath() 从 div 检索文本
Posted
技术标签:
【中文标题】硒问题尝试使用 driver.findElement(By.xpath() 从 div 检索文本【英文标题】:selenium issue trying to retrieve text from a div using driver.findElement(By.xpath() 【发布时间】:2020-06-12 23:41:22 【问题描述】:我正在尝试验证页面上的一些内容,并有一个带有标题列的网格。我想从中获取文本是验证的一部分。出于某种原因,它返回为空,我不明白为什么考虑到我使用包含文本来查找元素。
String expectedName = "Employee Name";
String actualName = driver.findElement(By.xpath("//div[contains(text(), 'Employee Name')]")).getText();
Assert.assertEquals(expectedName, actualName);
我得到的错误是:java.lang.AssertionError: expected [Employee Name] but found []
html:
<div class="dx-datagrid-text-content dx-text-content-alignment-left dx-header-filter-indicator" role="presentation">Employee Name</div>
【问题讨论】:
【参考方案1】:你似乎很亲密。要理想地提取<div>
元素的textContent,您需要为visibilityOfElementLocated()
诱导WebDriverWait,您可以使用以下Locator Strategies 之一:
cssSelector
:
String expectedName = "Employee Name";
String actualName = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.dx-datagrid-text-content.dx-text-content-alignment-left.dx-header-filter-indicator"))).getText();
Assert.assertEquals(expectedName, actualName);
xpath
:
String expectedName = "Employee Name";
String actualName = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='dx-datagrid-text-content dx-text-content-alignment-left dx-header-filter-indicator']"))).getText();
Assert.assertEquals(expectedName, actualName);
【讨论】:
这似乎不是一个好的解决方案,因为无需等待元素可见。如果元素不可见,String actualName = driver.findElement(By.xpath("//div[contains(text(), 'Employee Name')]")).getText();
会抛出错误,不是吗?
嗯,您正在通过它的文本 Employee Name 找到一个元素,然后您正在使用 getText()
提取相同的文本 Employee Name?你能告诉我们更多关于你的用例吗?
“用例”是什么意思?这是一个健全性检查,以确保屏幕按应有的方式加载并填充数据。我想我会首先确认一些列标题是可见的,然后检查预期的数据。那是你要找的吗?我不在乎如何找到元素,包含文本似乎是最干净的方式。以上是关于硒问题尝试使用 driver.findElement(By.xpath() 从 div 检索文本的主要内容,如果未能解决你的问题,请参考以下文章