当使用XPath进行搜索时,HtmlElements在块中找到3个元素而不是只有一个元素

时间:2014-10-16 12:47:18

标签: java selenium xpath htmlelements

我有个街区:

@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 个答案:

答案 0 :(得分:1)

使用&#34; // &#34;启动xpath定位器表示绝对块位置。要进行相对搜索,您应该使用&#34; 启动它。&#34;:

@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
}