gpt4 book ai didi

java - selenium chrome 驱动的getText() 方法有时会返回一个空字符串

转载 作者:IT老高 更新时间:2023-10-28 20:47:39 45 4
gpt4 key购买 nike

我有一个奇怪的案例, Selenium Chrome 驱动程序 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 驱动程序,它始终是 getText() 返回空字符串的“Text_5”。如果我使用 windows chrome 驱动程序,它始终是 getText() 返回空字符串的“Text_2”。如果我使用 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

最佳答案

更新: textContent 属性是一个更好的选择,并且在大多数浏览器中都受支持。这篇博文详细解释了这些差异:innerText vs. textContent

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

element.getAttribute("innerText")

isDisplayed() 方法有时会在元素没有真正隐藏而是在视口(viewport)之外时绊倒; getText() 为此类元素返回一个空字符串。

您也可以通过使用 javascript 滚动到它来将元素带入视口(viewport),如下所示:

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

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

isDisplayed() 方法的详细信息可以在这个 SO 问题中找到:

How does Selenium WebDriver's isDisplayed() method work

关于java - selenium chrome 驱动的getText() 方法有时会返回一个空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888592/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com