Требуется получить локатор (By) текущего веб-элемента.
Для моего проекта я использую пользовательские элементы. Так что для элемента HTML select будет класс SelectElement, а для элемента HTML будет класс OptionElement.
Для реализации пользовательских элементов я использую класс CustomWebElement
из этот репозиторий: https://github.com/JulHorn/java_selenium_custom_elements
Я хотел бы получить selectElementInstance.getOptions()
, который должен отчасти вернуть List<OptionElement>
, а не List<WebElement>
.
Так вот что Я пытаюсь сделать:
1) Я получаю List<WebElement>
с использованием метода findElements(...)
.
2) В этом списке я повторяю элемент один за другим.
3) Какое бы WebElement
я ни получил, я хочу получить экземпляр By для этого элемента.
4) С помощью экземпляра By в наличии и экземпляра WebDriver
я уже могу создать пользовательский элемент используя конструктор super(WebDriver driver, By by)
.
Ниже я привел пример кода:
List<WebElement> myList = driver.findElement(By.xpath("//select[@id ='abcd']/*"));
ListIterator<WebElement> simpleChildIterator = myList.listIterator();
List<OptionElement> options = new ArrayList<OptionElement>();
while(simpleChildIterator.hasNext())
{
By l = simpleChildIterator.next().getBy();//I want locator for same element
//Here I can now create Instance of OptionElement to add to List<OptionElement>
OptionElement o = new OptionElement(driver, l);
options.add(o);
}
Обратите внимание, что при использовании реализации OptionElement extends CustomWebElement
в Page Object в строках с PageFactory
, следующее работает абсолютно нормально для меня.
@findBy(xpath = "//select[@id ='abcd']/*")
List<OptionElement> options;
Но это работает из-за магнита PageFactory я c, который подключается через initElements()
вызов.
Я хочу, чтобы то же самое работало без участия PageFactory, когда я хочу определить новый метод List<OptionElement> getOptions()
в моем SelectElement
классе.
Я надеюсь, что вопрос ясен теперь, когда у меня есть сделал несколько правок.
Спасибо @Muzzamil за предложение, что WebDriver должен быть одноразовым. Я удалил это из моего вопроса. Также спасибо @Pranav, чтобы проиллюстрировать мою проблему с элементами select и option. Это лучший пример для объяснения.