2014-10-16 85 views
0

搜索時,只有一個塊我有一個塊:HTML元素髮現3個元素,而不是使用XPath

@Block(@FindBy(xpath = "//tr[contains(@class,'bg-success')]")) 
public class ShareContentRowBlock extends HtmlElement { 

    @FindBy(xpath = "//h3[@class='fileName']/span/a") 
    private TextBlock contentNameText; 

    public String getContentName() { 
     return contentNameText.getText(); 
    } 

    .... // some other elements and methods 
} 

我描述了一個頁面:

public class DocumentLibraryPage extends SitePage { 

    private List<ShareContentRowBlock> shareContentRowBlocks; 

    ..... 

    public ShareContentRowBlock getShareContentRowBlock(String name){ 
     for (ShareContentRowBlock conentRowBlock: shareContentRowBlocks){ 
      if(name.equals(conentRowBlock.getContentName())){ 
       return conentRowBlock; 
      } 
     } 
     return null; 
    } 
} 

當我試圖讓元素,它返回不完全是我想看到的元素。

我有HTML的元素樹:

html 
     h3.fileName 
     span 
      a 
     h3.fileName 
     span 
      a 
     table.bg-success 
     h3.fileName 
      span 
       a 

我想元素<a>表裏面,但是它返回所有3個<a>元素。 當我嘗試調試它時,確實發現所有的<a>元素都忽略了父塊xpath。

它有什麼問題?我需要更改選擇器,還是以其他方式描述塊?

回答

1

以「//」開始xpath定位符表示絕對塊位置。爲了進行相關搜索,您應該從「」開始:

@Block(@FindBy(xpath = "//tr[contains(@class,'bg-success')]")) 
public class ShareContentRowBlock extends HtmlElement { 

    @FindBy(xpath = ".//h3[@class='fileName']/span/a") 
    private TextBlock contentNameText; 

    public String getContentName() { 
     return contentNameText.getText(); 
    } 

    .... // some other elements and methods 
}