2016-11-17 52 views
0

因此,在Selenium中有一個WebElement,我試圖通過包含文本節點的XPath獲取它的所有直接子元素。我已經嘗試了XPath「*」,它可以工作,但不會給我任何文本節點(如果有的話)。根據XPath的文檔,我嘗試了很多東西:Selenium:帶XPath的InvalidSelectorException child :: node()

  • 「child :: node()」給了我InvalidSelectorException。
  • 試圖用「*」獲取所有節點,然後嘗試使用「text()」獲取所有文本節點:在「text()」查詢中給我InvalidSelectorException。

我在Chrome上使用XPathHelper擴展的方式嘗試了這些XPath,它的工作原理與此相似,但它似乎不適用於Selenium(Chrome WebDriver和PhantomJS)。

這是我的循環,我認爲應該工作:

for(WebElement child : node.findElements(new By.ByXPath("child::node()"))) { 
    //Do something with child 
} 

哪裏可能是問題?

回答

0

這就是我使用的。

public String getHiddenText(WebDriver driver, WebElement aWebElement) { 
    return (String) ((JavascriptExecutor) driver).executeScript("return arguments[0].textContent;", aWebElement); 
} 

尋址crawljax評論,

public String getHiddenText(EmbeddedBrowser browser, WebElement aWebElement) { 
    WebDriver driver = browser.getDriver(); 
    return (String) ((JavascriptExecutor) driver).executeScript("return arguments[0].textContent;", aWebElement); 
} 

我發現,學習新的工具,最好的辦法是去其github repository和搜索自動化測試瞭解如何使用它的例子。只是說。 :-)

+0

@Faterou文本節點可能會很痛苦。 Selenium的getText()方法試圖屏蔽你,但它並不適用於所有情況。我的方法被稱爲getHiddenText,因爲Selenium getText()方法在隱藏元素時不返回文本。但它會返回複雜的文本節點文本,無論是否隱藏。一個警告,它會返回非ASCII字符,如果存在,所以我經常添加.replaceAll(「[^ \\ x20 - \\ x7e]」,「」);來電。 – MikeJRamsey56

+0

這可能效果很好,謝謝!唯一的問題是我通過Crawljax使用Selenium,並且我沒有直接訪問驅動程序;我可以通過具有名爲executeJavaScript(String)的函數的接口EmbeddedBrowser進行訪問,所以我不能放置任何參數。我知道我沒有在問題中指定這個,所以我猜這已經解決了...... – Faterou

+0

另外,textContent返回所有後代的文本值,我只是想要直接的孩子。 – Faterou