Я предполагаю, что вы используете Java для этого ответа, и что у вас есть код, который выглядит следующим образом:
@FindBy(id = "foo")
WebElement element;
Вам будет сложно создать служебный метод, которыйделает это, потому что объект WebElement
не предоставляет способ извлечь локатор, который использовался для его генерации.У меня есть несколько вариантов, которые я могу придумать.
Опция 1
Измените реализацию PageFactory, чтобы генерировать список WebElement
, а не один WebElement
@FindBy(id = "foo")
List<WebElement> allElements;
Недостатком является то, что вам, очевидно, потребуется выполнить allElements.get(0)
, чтобы получить начальный элемент из этого объекта, когда вы используете его в своем объекте страницы.
Вариант 2
Переключение с PageFactory на использование объекта Query.Это небольшая библиотека, которую я написал, чтобы обойти различные проблемы, которые у меня были с Java PageFactory.Код доступен на Github , а библиотека доступна в Maven Central (инструкции по использованию см. В README.md на Github, установка очень похожа на PageFactory).Это позволит вам определить ваши элементы следующим образом:
Query query = new Query().defaultLocator(By.id("foo"));
Теперь у вас есть возможность извлечь WebElement или список веб-элементов, используя вышеуказанный объект:
WebElement soloElement = query.findWebElement();
List<WebElement> allElements = query.findWebElements();
для вашей конкретной проблемы вы сможете выполнить проверку следующим образом:
if(query.findWebElements().size() > 0){
//Do Something
}
Это также позволит вам вытащить оригинальный локатор для использования в служебных функциях или явное ожидание при необходимости
By originalLocator = query.by()