HtmlElements находит 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
}