0

私はブロックを持っています:

@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 を無視してすべての要素が実際に検出されます。

それの何が問題なのですか?セレクターを変更したり、別の方法でブロックを記述したりする必要がありますか?

4

1 に答える 1

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
}
于 2014-10-16T12:52:06.147 に答える