Java 如何从没有指定HTML标记的元素中获取文本
有人能帮我解决我遇到的以下问题吗。到目前为止,我还没有找到任何解决办法 我想通过XPath从以下html获取文本:'You is logging as',但由于没有html标记,我无法以任何方式获取文本,我尝试了:Java 如何从没有指定HTML标记的元素中获取文本,java,html,selenium,xpath,selenium-webdriver,Java,Html,Selenium,Xpath,Selenium Webdriver,有人能帮我解决我遇到的以下问题吗。到目前为止,我还没有找到任何解决办法 我想通过XPath从以下html获取文本:'You is logging as',但由于没有html标记,我无法以任何方式获取文本,我尝试了:XPath=//div[@class='div3']]/img,但没有成功 以下是html: <body> <div id="container"> <div id="header"> <div class="di
XPath=//div[@class='div3']]/img
,但没有成功
以下是html:
<body>
<div id="container">
<div id="header">
<div class="div1">
<div class="div2">
<div class="div3" style="background-color: transparent;">
<img style="position: relative; top: 3px;" alt="" src="view/image/lock.png">
You are logged in as
<span>admin</span>
</div>
</div>
<div id="menu"></div>
...
您是以用户身份登录的
管理
...
这就是用python编写的方式。尽管如此,这个文本将包含“admin”一词,您也可以简单地删除它 html文档中的元素img不是成对标记,因此不包含文本。此外,By.xpath方法不支持“xpath=”前缀 获取文本的最简单方法是查询父div元素的文本 表情
driver.findElement(By.xpath("//div[@class='div3']")).getText()
返回“您以管理员身份登录”。现在只需要一个简单的字符串表达式就可以得到所需的结果。在做出断言之前,修剪文本总是一个好主意
如果您真的需要只获取img和span元素之间的文本(不包括span元素的内容),那么您可能必须求助于JavaScript。看一看。首先,远离xpath。。它速度较慢,而且不如CSS好看 因此,您的问题是,您需要获取您作为登录的文本
。到目前为止,您尝试的是获取
标记的文本,但是标记没有innerHTML。您需要获取的是直接父级的文本。您可以使用此CSS选择器执行此操作:
爪哇:
因此,这将返回您现在以管理员身份登录的文本
在assert
子句中,写下:
assertTrue(driver.findElement(By.cssSelector("div#container div.div3")).getText().contains("You are logged in as"));
我要求您做的另一件事是查看那些
类。div1 | div2 | div3
是他们实际使用的类吗?如果没有,您可以发布实际的html吗?因此您的目标是来自此
元素的内容。您发现可以使用以下XPath表达式选择它//div[@class=“div3”]
现在,在这个元素中,您有几个子元素(直接子元素的XPath是//div[@class=“div3”]/node()
):
- 文本节点
'\n'
- 和
img
element(实际上我尝试使用xpath=“//div[@class='div3']”,但是当我使用assertEquals(driver.findelelement(By.xpath(“xpath=//div[@class='div3']””)).getText(),“您以身份登录”);我收到无效的选择器错误:无法使用xpath表达式定位元素,这是因为xpath=//div[@class='div3']
不是有效的xpath。@米拉,我想你对Selenium 1 api感到困惑了。在S1中,你需要在选择器前面加上种类。例如:css=somecsselector
id=someid
。在WebDriver中,你不需要这样做。现在,它都由by
类控制。by.id(“someid”),By.xpath(//somexpath)
我会反驳xpath速度越来越慢的事实。我一周前做的最新测试实际上表明,在FF25.0.1中,在抓取表格时xpath速度更快。我也看到其他人得出了同样的结论,比如这个家伙:。关于丑陋,这是一个品味的问题-我发现xpath更灵活,因为你可以同时浏览标记ys(从孩子到父母)。XPath的问题是,很多人都不太擅长编写它们,firebug给了你非常难看和脆弱的东西。谢谢大家!@sircapsalot,css选择器“div#container div.div3”解决了我的问题。我将进一步检查如何使用java脚本获取不包括span元素的文本。
driver.findElement(By.cssSelector("div#container div.div3")).getText();
assertTrue(driver.findElement(By.cssSelector("div#container div.div3")).getText().contains("You are logged in as"));
//div[@class="div3"]/text()[normalize-space() != ""]