2014-08-29 84 views
2

我試圖通過xpath獲取webelement的文本。附上網頁的HTML內容, First Page通過xpath獲取webelement的文本

Second Page where highlighted in Green is the text(Closed) that I needed

我用下面的代碼,

String v = driver.findElement(By.xpath("//div[1]/div[contains(@class, 'ng-scope ngRow')]//div[contains(@class, 'ngCell ng-scope col7 colt7')//" 
       + "div[contains(@class, 'ngCellText ng-scope ngCellElement col7 colt7')]")).getText(); 

這引發錯誤「的表達是不是一個合法的表達式。‘代碼:’ 12" nsresult: 「0x805b0033(的SyntaxError)」 位置: 「」]」

當我縮小所述搜索直到

String v = driver.findElement(By.xpath("//div[1]/div[contains(@class, 'ng-scope ngRow')]")).getText(); 

它的作品,我得到特定行中的所有文字。但是,當我將其擴展到第一個代碼所示的列時,我會遇到錯誤。

HTML片段,

<div class="ng-scope ngRow even" ng-row="" ng-class="row.alternatingRowClass()" ng-click="row.toggleSelected($event)" ng-repeat="row in renderedRows" ng-style="rowStyle(row)" style="top: 0px; height: 30px;"> 
<div class="ngCell ng-scope pinned col0 colt0" ng-class="col.colIndex()" ng-repeat="col in renderedColumns" ng-style="{ 'cursor': row.cursor }" ng-dblclick="loadInstance(row.getProperty('incident_number'), 'ticket')" style="cursor: default;"> 
<div class="ngCell ng-scope col7 colt7" ng-class="col.colIndex()" ng-repeat="col in renderedColumns" ng-style="{ 'cursor': row.cursor }" ng-dblclick="loadInstance(row.getProperty('incident_number'), 'ticket')" style="cursor: default;"> 
<div class="ng-isolate-scope" data-target="actions_menu" context-menu=""> 
<div ng-style="{ 'cursor': row.cursor }" style="cursor: default;"> 
<div class="ngVerticalBar ngVerticalBarVisible" ng-class="{ ngVerticalBarVisible: !$last }"/> 
<div ng-cell=""> 
<div class="ngCellText ng-scope ngCellElement col7 colt7" ng-class="col.colIndex()" tabindex="0"> 
<span class="ng-binding" ng-cell-text="">Closed</span> 
</div> 
</div> 
</div> 
</div> 
</div> 
+0

在遇到錯誤之前,您的第二個XPath查詢是否可以進入DOM最遠?您是否可以發佈(作爲代碼)標記的相關部分,以便我們測試您的查詢? – xDaevax 2014-08-29 15:54:16

+0

不,第二個查詢是有效的。如果我深入到第一個查詢中提到的下一個級別,它將失敗。 – ASANT 2014-08-29 15:56:27

+0

帶有代碼的圖像不可讀。請用實際文字替換它們,縮進四個空格。然後,它會自動呈現爲HTML。 _But_:確定HTML的_relevant_片段,不要用很多標記來轟炸我們。 – 2014-08-29 16:23:16

回答

0

只是結果如下測試了它:在粘貼的HTML 3收盤</div>丟失。 有了您的XPath的最小調整,我得到以下結果:

<div class="ngCellText ng-scope ngCellElement col7 colt7" 
ng-class="col.colIndex()" tabindex="0"> 
<span class="ng-binding" ng-cell-text="">Closed</span> 
</div> 

你只是錯過了在第一個XPath的,那麼它應該工作:

"//div[1]/div[contains(@class, 'ng-scope ngRow')] 
//div[contains(@class, 'ngCell ng-scope col7 colt7')//" 
+ "div[contains(@class, 'ngCellText ng-scope ngCellElement col7 colt7')]")) .. 

在二號線收盤】丟失,它應該是:

"//div[1]/div[contains(@class, 'ng-scope ngRow')] 
//div[contains(@class, 'ngCell ng-scope col7 colt7')]//" 

正如我剛纔使用XPath的測試儀檢查,不具有相同的設置你的工作,你應該給它一個嘗試。希望有所幫助。