我的页面中有以下HTML。
<div dojoattachpoint="rowNode" class="dijitTreeRow dijitTreeRowSelected" wairole="presentation" dojoattachevent="onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick" role="presentation" title="" style="padding-left: 19px; ">
<img src="/runtime/explorer.sharedresources/javascript-1.7.22.268034/release/dojo/resources/blank.gif" alt="" dojoattachpoint="expandoNode" class="dijitTreeExpando dijitTreeExpandoLeaf" wairole="presentation" role="presentation"/>
<span dojoattachpoint="expandoNodeText" class="dijitExpandoText" wairole="presentation" role="presentation">*</span>
<span dojoattachpoint="contentNode" class="dijitTreeContent" wairole="presentation" role="presentation">
<img src="/runtime/explorer.sharedresources/javascript-1.7.22.268034/release/dojo/resources/blank.gif" alt="" dojoattachpoint="iconNode" class="dijitIcon dijitTreeIcon criterionFolder" wairole="presentation" role="presentation"/>
<span dojoattachpoint="labelNode" class="dijitTreeLabel" wairole="treeitem" tabindex="-1" waistate="selected-false" dojoattachevent="onfocus:_onLabelFocus" role="treeitem" aria-selected="true">**My TEXT**</span>
</span>
</div>
这是正确识别元素的代码。
List<WebElement> RowNodesList = elementPopup.findElements(By.xpath("//div[@dojoattachpoint =\"rowNode\"]"));
for(WebElement RowNode:RowNodesList)
{
System.out.println("Left Padding: " + RowNode.getAttribute("style"));
System.out.println("Is Row Node Displayed: " + RowNode.isDisplayed());
WebElement labelNode = RowNode.findElement(By.xpath("//span[@dojoattachpoint=\"labelNode\"]"));
boolean IsNodeDisplayed = labelNode.isDisplayed();
System.out.println("Is Label Node Displayed: " + IsNodeDisplayed);
String NodeLabel = (String) ((JavascriptExecutor) _driver).executeScript("return arguments[0].firstChild.nodeValue",labelNode);
System.out.println("Row label From javaScript: " + NodeLabel);
System.out.println("Row label: " + labelNode.getText());
System.out.println("Row Class: " + labelNode.getAttribute("class"));
}
这是从代码生成的输出。
Left Padding: PADDING-LEFT: 19px
Is Row Node Displayed: true
Is Label Node Displayed: false
Row label From javaScript: undefined
Row label:
Row Class: dijitTreeLabel
由于某种原因,.getText()返回一个空字符串。有任何想法吗? 提前谢谢。
编辑: 奇怪的是,labelNode.isdisplayed()返回false,即使它在页面上可见。
编辑2:我已经将我的OP编辑到上面,以使问题更加清晰。因此,我想要的文本位于标签节点的SPAN标记中,该标记节点是RowNode的子节点。据说会显示RowNode,但标签节点不会显示。我认为这就是为什么LabelNode的.getText()返回一个空字符串。
我还能通过其他方式获取文字吗?
编辑3:我发现了问题。这是xpath搜索字符串。 而不是
WebElement labelNode = RowNode.findElement(By.xpath("//span[@dojoattachpoint=\"labelNode\"]"));
需要将xpath更改为
WebElement labelNode = RowNode.findElement(By.xpath(".//span[@dojoattachpoint=\"labelNode\"]"));
我曾假设“//”将指示WebDriver在当前上下文中查看。但显然,它在整个身体内搜索(这不直观),并返回被发现的第一个被隐藏的元素。 添加“.//”指示它在当前上下文(RowNode)中搜索。
感谢大家的帮助。
答案 0 :(得分:1)
好的,我能让这个工作的唯一方法是使用它:
var textstring = driver.findElement(global[type](elements)).getAttribute('innerHTML').then(
function(textstring) {
console.log(textstring);
})
其中globaltype可以是webdriver.By.id(),xpath或name。
webdriver.By.css也有效。
答案 1 :(得分:-1)
在System.out.println语句中,您使用的是“contentNode”而不是“labelNode”。这是一个错误,还是在代码中的其他地方声明了?
在C#中,我使用以下内容来正确获取文本:
IWebElement labelNode = driver.FindElement(By.XPath("//span[@dojoattachpoint=\"labelNode\"]"));
string labelNodeText = labelNode.Text;
答案 2 :(得分:-1)
我想澄清RowNode
变量是否属于WebDriver类型,还必须在正确的WebElement上调用get text。
尝试使用以下代码 -
WebElement labelNode = driver.findElement(By.xpath("//span[@dojoattachpoint='labelNode']"));
System.out.println("Row label: " + labelNode.getText());
System.out.println("Row label: " + labelNode.getAttribute("class"));
如果在此更改后为getText()方法返回空字符串。它或者意味着此WebElement的文本不可见。您还可以使用implicitWait语句确保在尝试访问WebElement之前正确加载页面。
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
希望这会对你有所帮助。
当您在浏览器上打开页面时,是否可以告诉我页面上是否显示“我的文字”。如果可见,您可以使用getText()方法获取值。如果没有,那就试试吧 -
String labelNodeText = (String) ((JavascriptExecutor) _driver).executeScript("return arguments[0].innerHTML",labelNode);