如何使用SeleniumWebDriver和Java从包含在多个span标记中的span元素中获取实际文本

如何使用SeleniumWebDriver和Java从包含在多个span标记中的span元素中获取实际文本,java,selenium,Java,Selenium,嗨,我是Selenium Webdriver的新手。请帮我解决这个问题 HTML结构如下所示: <div> "other attibutes" <span> "other attibutes" <span> "other attibutes" <span> "other attibutes" Text </span> </span> <

嗨,我是Selenium Webdriver的新手。请帮我解决这个问题

HTML结构如下所示:

<div> "other attibutes"
    <span> "other attibutes"
        <span>  "other attibutes"
            <span> "other attibutes" Text </span>     
        </span>
    </span>
</div>
输出中没有编译或运行时错误

实际上,只有最后一个span元素有一个文本,但对于上面的span标记,它只有不同的属性,而没有元素文本。所有跨度元素都具有最后一个跨度元素的文本。因此,我对selenium web驱动程序的行为感到困惑

我不确定我是否得到了正确的输出。或者,这是selenium web驱动程序的默认特性,用于上述跨度树

因此,请向我解释一下这里到底发生了什么,或者我这边有一些错误。

您应该使用-JAVA HTML解析器库来执行这些操作。您的代码按其应有的方式工作。根据文件

 getText() 
返回此元素(包括子元素)的可见(即未被CSS隐藏)innerText,不带任何前导或尾随空格

因此,它将返回子元素的内部文本。i、 e.内部跨度元素的文本。为了只定位包含文本内容的内部span元素,您可以按类对
进行子类化,并根据需要覆盖受保护的方法,尽管所有子类都依赖于通过此类静态方法提供的基本查找机制

您有3个
元素,一个在另一个内部,因此,即使您自己承认,您的输出也是准确的:“所有的span元素都有最后一个span元素的文本”

您可以更改:

List <WebElement> objSpanList = driver.findElement(By.id("dijit_layout_ContentPane_1")).findElements(By.tagName("span"));
List lst=driver.findElements(按.tagName(“span”);

对于(int i=0;非正常情况下,Selenium Web Driver拥有解析任何类型HTML的所有API。我只想知道对上述粘贴代码结果的解释。上述代码是否存在任何问题?是预期的输出还是有什么问题?请解释我。如果我使用Jsoup解析器,那么我会发现什么区别?是否有问题ng是否返回span元素中唯一一个实际包含文本的文本?请回答…一般来说,使用JSOUP很容易。我看到了
getText()
返回文本。您是否检查了标记是否正确关闭?是的,我在这里检查了标记是否正确。请告诉我这是Selenium Web驱动程序的继承特性吗?还是出了什么问题?因此,您是说,对于上span元素,如果span元素没有特定的元素文本,那么对于它们,我仍将获取ng文本,它来自内部span元素,相对于上面的元素,内部元素有它自己的特定文本。谢谢你的意见。实际上,我不能像你说的那样使用静态xpath。原因是我想要泛型函数。我只传递form对象之类的东西,然后我想删除任意数量的跨元素深度。因此硬编码的xpath在这里对我不起作用。如果你有更好的想法,请与我分享。如果你有确切的HTML(而不仅仅是“其他属性”),请与我分享。你能提供真正的HTML吗?很难用半生不熟的HTML将其可视化。
 getText() 
List <WebElement> objSpanList = driver.findElement(By.id("dijit_layout_ContentPane_1")).findElements(By.tagName("span"));
WebElement innerSpan = driver.findElement(By.xpath(\\div\span\span\span"));
    List<WebElement> lst=driver.findElements(By.tagName("span"));
    for(int i=0;i<lst.size();i++)
    {System.out.println(lst.get(i).getText());}