2017-08-08 173 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