一尘不染

Selenium Chrome驱动程序的getText()方法有时会返回一个空字符串

selenium

我有一个奇怪的情况,seleniumchrome驱动程序getText()方法(java)为某些元素返回一个空字符串,即使它为具有相同元素的其他元素返回了一个非空字符串xpath。这是页面的一部分。

<div __gwt_cell="cell-gwt-uid-223" style="outline-style:none;">
<div>Text_1</div>
<div>Text_2</div>
<div>Text_3</div>
<div>Text_4</div>
<div>Text_5</div>
<div>Text_6</div>
</div>

每个内标签的,我可以得到有效的返回值getTagName()getLocation()isEnabled(),和isDisplayed()。但是,getText()对于某些div返回空字符串。

此外,我注意到,如果使用mac chrome驱动程序,则始终是’Text_5’,其getText()将返回一个空字符串。如果使用Windows
chrome驱动程序,则为,它始终是“
Text_2”,其getText()返回一个空字符串。如果我使用firefox驱动程序,getText()则从所有div返回期望的文本。

还有其他人有这个困难吗?

在我的代码中,我使用了类似的内容…

ArrayList<WebElement> list = (ArrayList<WebElement>) driver.findElements(By.xpath(“my xPath here”));
for (WebElement e: list) System.out.println(e.getText());

如下所示,这是xPath我正在使用的实际值。上面的页面摘要涉及最后两个div。

//*[@class='gwt-DialogBox']//tr[contains(@class,'data-grid-table-row')]//td[contains(@class,'lms-assignment-selection-wizard-cell')]/div/div

阅读 353

收藏
2020-06-26

共1个答案

一尘不染

更新:
textContent属性是一个更好的选择,并且在大多数浏览器中都受支持。差异将在此博客文章中详细说明:innerText与textContent

作为替代,该innerText属性将返回DOM中存在的元素的文本内容。

element.getAttribute("innerText")

isDisplayed()当元素不是真正隐藏而是在视口之外时,该方法有时可能会跳过;getText()返回此类元素的空字符串。

您还可以使用javascript滚动到视口,将其带入视口,如下所示:

((JavaScriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element);

然后getText()应返回正确的值。

2020-06-26