如何使用SeleniumWebDriver和Java从包含在多个span标记中的span元素中获取实际文本
嗨,我是Selenium Webdriver的新手。请帮我解决这个问题 HTML结构如下所示:如何使用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> <
<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());}