2017-08-08 84 views
-1

我想從下面的一組代碼獲得標題文本「互動/誇大其詞&狂歡調查分數/ CSS呼叫量」檢索的第二個搜索結果標題屬性文字:我無法從搜索結果列表

<div id="$searchResults_children" class="treeChildContainer" style="margin-left: 0px; display: block;"> 
    <div id="$InteractionsAHT Call FactsTransfer Attempts" class="treeNode" style="display: block;"> 
     <span class="masterTreeLine treeLine" style="display: block;"> 
      <img id="$InteractionsAHT Call FactsTransfer Attempts_disclosure" src="res/v-0YH2UYTNo3k/s_Alta/uicomponents/obips.Tree/disclosure_collapsed.png" alt="" class="treeNodeDisclosure" style="visibility: hidden;"> 
      <span id="$InteractionsAHT Call FactsTransfer Attempts_details" class="treeNodeDetails" title="Interactions/Inbound Call Facts/AHT Call Facts"> 
       <img src="res/v-0YH2UYTNo3k/s_Alta/uicomponents/obips.Tree/measure.png" alt="" class="treeNodeIcon"> 
       <span class="treeNodeText">Transfer Attempts</span> 
      </span> 
     </span> 
     <div id="$InteractionsAHT Call FactsTransfer Attempts_children" class="treeChildContainer"></div> 
    </div> 
    <div id="$InteractionsCSS Call VolumesTransfer %" class="treeNode" style="display: block;"> 
     <span class="masterTreeLine treeLine" style="display: block;"> 
      <img id="$InteractionsCSS Call VolumesTransfer %_disclosure" src="res/v-0YH2UYTNo3k/s_Alta/uicomponents/obips.Tree/disclosure_collapsed.png" alt="" class="treeNodeDisclosure" style="visibility: hidden;"> 
      <span id="$InteractionsCSS Call VolumesTransfer %_details" class="treeNodeDetails" title="Interactions/Rant & Rave Survey Scores/CSS Call Volumes"> 
       <img src="res/v-0YH2UYTNo3k/s_Alta/uicomponents/obips.Tree/measure.png" alt="" class="treeNodeIcon"> 
       <span class="treeNodeText masterTreeLineSelected treeLineSelected masterTreeLineActive treeLineActive treeNodeFocusClass">Transfer %</span> 
      </span> 
     </span> 
     <div id="$InteractionsCSS Call VolumesTransfer %_children" class="treeChildContainer"></div> 
    </div> 
</div> 

代碼:

List<WebElement> searchResults = driver.findElements(By.xpath("//div[@id='$searchResults_children']/div")); 

for (WebElement searchResult : searchResults) { 
    String item = searchResult.getText(); 

    if (item.equals(searchItemName)) { 

     WebElement tooltip = searchResult.findElement(By.xpath("//div[@id='$searchResults_children']/div[@class='treeNode']/span[@class='masterTreeLine treeLine']/span[@class='treeNodeDetails']")); 

     String tooltipName = tooltip.getAttribute("title"); 

     System.out.println("Mertic: " + item + "\nTooltip: "+ tooltipName); 
    } 
} 

我試圖找回的是標題文本「互動/誇大其詞&狂歡調查分數/ CSS呼叫量」,這是第二個搜索結果。但是我從第一個結果中得到了標題。

我一直在想,因爲我使用搜索結果來查找下一個元素,它應該一次只能容納一個搜索項,但在這裏並不是這樣。

請建議。

+0

右遠,你正在做的一切硒去。我在c#中測試了你的代碼,它運行良好,但你沒有使用C#。這可能是斜線行爲像分隔符或什麼的問題。 tooltipName的價值是什麼? –

+0

IMO,大部分'id'在我看來都是動態生成的id。因此,您可能無法將使用'id'的節點與'$ searchResults_children'匹配。 – DebanjanB

+0

@ chris-crush-code我得到的tooltipName的值是「Interactions」 – TimeMuffin

回答

0

/在java中有一個特殊的參考。可能是它造成了問題。

我還沒有試過,但嘗試下面的代碼,它可以幫助:

String test[]; 
List<WebElement> searchResults = driver.findElements(By.xpath("//div[@id='$searchResults_children']/div")); 

for (WebElement searchResult : searchResults) 
{ 
    String item = searchResult.getText(); 
    WebElement tooltip =searchResult.findElement(By.xpath("//div[@class='treeNode']/span/span")); 
    test = tooltip.getText().split("/"); 
    for (String searchResult1 : test) 
    { 

     System.out.println(searchResult); 
    } 
    String tooltipName = tooltip.getAttribute("title"); 
    System.out.println("Mertic: "+item+", Tooltip: "+tooltipName); 
} 
+0

更新了,但現在 –

+0

抱歉......無法理解'for循環'是什麼。這不是在任何地方使用。我錯過了什麼嗎? – TimeMuffin

+0

內部循環打印後,將值從「/」分開..如果它工作,那麼我可以告訴你進一步的改進..你能夠得到所有的值 –

0

試試這個

WebElement tooltip =searchResult.findElement(By.xpath("/div[@class='treeNode']/span/span")); 

既然你正在尋找的直接孩子div/div/span/span

還做你需要遍歷外部元素「div」的所有元素/子元素?如果沒有,那麼你可以使用hirarchy用,直到跨度的所有元素(如果沒有改變未來這個hirarchy的風險)

+0

沒有這樣做沒有工作......我也只是嘗試這個,但我不知道爲什麼它會從頁面中選擇其他的東西。我認爲它應該是我的特定搜索結果div的限制,並會給我所需的價值。 – TimeMuffin

0

您正在尋找得到這個元素

<span id="$InteractionsAHT Call FactsTransfer Attempts_details" class="treeNodeDetails" title="Interactions/Inbound Call Facts/AHT Call Facts"> 

它的title屬性一個ID,所以我們可以使用它來找到它,然後拉title屬性。

driver.findElement(By.cssSelector("span[id$='Attempts_details']")).getAttribute("title"); 

此定位器查找一個SPAN,其具有與($Attempts_details結束的ID。我們可以指定整個ID,但它很長,並且這個子字符串是唯一的,至少使用提供的HTML。


我假定你得到了錯誤的元素,因此是一個不完整的標題。我猜測它與將其寫入控制檯有關?它應該起作用,因爲對於正斜槓沒有特別的意義。您是否嘗試將其寫入文本文件或在該行上放置一個斷點並查看該變量包含的內容?

0

正如您在您的評論提到,the id $searchResults_children is static for any search result下面的代碼塊將檢索文本相互作用/呼入電話的事實/ AHT呼叫事實從所需的節點:

String my_string = driver.findElement(By.xpath("//div[@id='$searchResults_children']/div[@class='treeNode'][contains(@id, 'FactsTransfer Attempts')]/span[@class='masterTreeLine treeLine']//span[@class='treeNodeDetails']")).getAttribute("title"); 
System.out.println(my_string); 
+0

我試過這個,但是它從頁面中獲取了一些其他元素。我還發現沒有正斜槓的問題,只有我的xpath(你建議的那個)指向頁面中的其他元素 – TimeMuffin

+0

我廣泛使用了父節點屬性'@ id = 'searchResults_children',你提到它是靜態的,並且已經爬過了子節點,以便我們可以到達確切的節點。現在正如你所提到的'xpath(你所建議的那個)'指向其他一些元素'本質上就是指我們所指的'HTML DOM'並不是確切的一個。 – DebanjanB

+0

對不起,我應該提到有多個div節點包含不同的搜索結果。所有這些節點都在div節點下方 @id ='$ searchResults_children' 我已將其中的一個html放入 – TimeMuffin