如何从元素中获取没有指定HTML标记的文本

时间:2014-02-01 20:07:05

标签: java html selenium xpath selenium-webdriver

任何人都可以帮我解决我遇到的以下问题。到目前为止,我找不到任何解决方案。

我想通过XPath从以下html中获取文本:'你是以'登录',但由于没有HTML标签,我无法以任何方式获取文本,我尝试过:{{1}但是没有成功。

这是html:

xpath=//div[@class='div3']/img

4 个答案:

答案 0 :(得分:0)

xpath="//div[@class='div3']"
elem = elem.find_element_by_xpath(xpath)
print elem.text

这是你在python中编写的方式。但是,此文本还包含“admin”字样,您可以将其删除。

答案 1 :(得分:0)

html文档中的元素img不是对标签,因此不包含任何文本。另外,By.xpath方法不支持“xpath =”前缀。

获取文本的最简单方法是查询父div元素的文本。

表达式

driver.findElement(By.xpath("//div[@class='div3']")).getText()

返回“您以管理员身份登录”。现在只需一个简单的String表达式即可获得所需的结果。在做出断言之前修剪文本总是一个好主意。

如果您确实只需要获取img和span元素之间的文本(不包括span元素的内容),则可能需要使用JavaScript。看看Reading text using selenium webdriver(xpath)

答案 2 :(得分:0)

首先,远离xpath ..它比较慢,而且不如CSS那么漂亮。

所以你的问题是,你需要获得文本You are logged in as。您到目前为止尝试的是获取<img />标记的文本,但是<img /&gt; tag没有innerHTML。您需要获取的是直接父级的文本。您可以使用此CSS选择器执行此操作:

爪哇:

driver.findElement(By.cssSelector("div#container div.div3")).getText();

那么这将使你回归的是文字You are now logged in as admin

assert子句中,写下:

assertTrue(driver.findElement(By.cssSelector("div#container div.div3")).getText().contains("You are logged in as"));

我挑战你要做的另一件事是查看那些<div>类。 div1 | div2 | div3是他们使用的实际课程吗?如果没有,你可以发布实际的HTML吗?

答案 3 :(得分:0)

因此,您要定位此<div class="div3"...>元素中的内容。您发现可以使用以下XPath表达式//div[@class="div3"]选择它。

现在,在这个元素中,你有几个孩子(直接孩子的XPath是//div[@class="div3"]/node()):

  • 文本节点'\n '
  • img元素(<img style="position...>),
  • 另一个文字节点'\n You are logged in as\n '
  • span元素(<span>admin</span>),
  • 最终文本节点'\n '

如果只想选择子 text 节点,可以使用//div[@class="div3"]/text()

但是我知道你想要提取第一个非全空白文本节点,即“你以登录身份登录”的节点。因此,您可以使用XPath的normalize-space()函数来测试删除的文本内容白色空格是否为空:

//div[@class="div3"]/text()[normalize-space() != ""]