Параметризация значений атрибутов аннотации @FindBy

Как известно, значения атрибутов аннотаций в Java должны быть константами. Это не очень-то подходит для @FindBy. Например, у меня есть XPATH:

"//table/tbody/tr/td/a[contains(text(), '%username%')]",

где сабстринг %username% я хочу заменять на тот юзернейм, который мне нужен, после чего подставлять уже готовый XPATH в @FindBy(xpath = ...). Другими словами:

String usersPageLinkUsername = Locators.usersPageLinkUsernameTmpl.replaceAll("%username%", "user123");

@FindBy(xpath = usersPageLinkUsername)
public WebElement linkUser;

работать не будет т.к. usersPageLinkUsername уже не константа. Как поступить в этом случае?

P.S. Юзкейс: создается юзер с юзернеймом, сгенерированным рандомно, после чего этого юзера нужно удалить (чтоб удалить юзера нужно сначала зайти в его профиль, кликнув на его юзернейме в списке юзеров).

 

существующими средствами вы это никак не сделаете, потому что аннотация @FindBy непринимает никаких параметров

можно конечно это сделать, но вам придется переопределять классы декораторов, для того чтобы это сделать

похожие темы форума для прочтения

http://automated-testing.info/forum/page-object-rabota-s-nestandartnymi-obektami

http://automated-testing.info/forum/kastomnyy-fielddecorator-i-pagefactory

Либо, самый простой вариант -- сделайте это -- методом

 

public WebElement linkUser()

{

    return driver.FindElement("XPATH" + Anycode + here)

}