【问题标题】:How to get the actual text from a span element enclosed within multiple span tags, using Selenium Webdriver with Java如何使用 Selenium Webdriver 和 Java 从包含在多个 span 标签内的 span 元素中获取实际文本
【发布时间】:2014-02-03 16:02:20
【问题描述】:

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

HTML 结构如下:

<div> "other attibutes"
    <span> "other attibutes"
        <span>  "other attibutes"
            <span> "other attibutes" Text </span>     
        </span>
    </span>
</div>

现在我正在编写这样的 Java 代码:

public getCustomText() {
    List <WebElement> objSpanList = driver.findElement(By.id("dijit_layout_ContentPane_1")).findElements(By.tagName("span"));
    for (WebElement e : objSpanList) {
        System.out.println("The element text is : "+e.getText());
    }
}

当我调用这个函数时,它的输出如下:

 Text 

 Text

 Text

输出中没有编译或运行时错误。

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

我不确定我是否得到了正确的输出。或者这是上面生成树的 selenium web 驱动程序的默认性质。

所以请向我解释一下这里到底发生了什么,否则我有一些错误。

【问题讨论】:

  • 你能提供真正的HTML吗?使用不成熟的 HTML 很难将其可视化。

标签: java selenium


【解决方案1】:

您有 3 个 &lt;span&gt; 元素,一个在另一个中,因此即使您自己承认,您的输出也是准确的:“所有跨度元素都具有最后一个跨度元素的文本”。

你可以改变:

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"));

【讨论】:

  • 感谢您的意见。实际上,我不能像你所说的那样使用静态 xpath。原因是我想要通用功能。我只会传递表单对象之类的东西,然后我想迭代任意数量的跨度元素深度。所以硬编码的 xpath 在这里对我不起作用。
  • 如果你有更好的想法,请分享给我。
  • 如果您有准确的 HTML(而不仅仅是“其他属性”),请与我分享。
【解决方案2】:

您应该使用Jsoup - 用于这些操作的 JAVA HTML 解析器库。您的代码可以正常工作。根据文档,

 getText() 

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

因此,它将返回子元素的内部文本。即内部跨度元素的文本。 为了仅定位带有文本内容的内部 span 元素,您可以继承 By 类并根据需要覆盖受保护的方法,尽管预计所有子类都依赖于通过静态方法提供的基本查找机制这个类

【讨论】:

  • 通常 Selenium Web 驱动程序具有解析任何类型的 HTML 的所有 API。我只是想知道上面粘贴代码的结果的解释。上面的代码有问题吗?是预期的输出还是有什么问题?请解释我..
  • 如果我使用 Jsoup 解析器,那么我会发现哪些差异?它会返回给我实际包含文本的 span 元素的唯一文本吗?请回复....
  • 一般来说,使用 JSOUP 很容易。我看到 getText() 返回文本。您检查标签是否正确关闭?
  • 是的,我确实在这里正确检查了标签。告诉我这是否是 Selenium Web 驱动程序的继承性质?还是出了什么问题?
  • 所以你是说对于上面的 span 元素,如果 span 元素没有特定的元素文本,仍然对他们来说,我会得到文本,它来自内部 span 元素相对于那个上部元素,其中内部元素具有它自己的特定文本。
【解决方案3】:
    List<WebElement> lst=driver.findElements(By.tagName("span"));
    for(int i=0;i<lst.size();i++)
    {System.out.println(lst.get(i).getText());}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2019-12-23
    • 2019-05-20
    • 2023-03-05
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多