任何人都可以帮我解决我遇到的以下问题。到目前为止,我找不到任何解决方案。
我想通过XPath从以下html中获取文本:'你是以'登录',但由于没有HTML标签,我无法以任何方式获取文本,我尝试过:{{1}但是没有成功。
这是html:
xpath=//div[@class='div3']/img
答案 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() != ""]