Как создать служебный метод для проверки наличия веб-элемента на веб-странице в шаблоне PageObjectModel - PullRequest
1 голос
/ 10 июня 2019

Я хочу создать служебный метод для проверки наличия веб-элемента на веб-странице в рамках POM. я могу использовать логику driver.findelements (By. (xpath) / Id / css stc) и проверить размер. Если размер> 0, элемент присутствует. Но в этом случае я не могу передать PageFactory Webelement в качестве параметра, поскольку findelements принимает в качестве параметра только String, но не webelement. Поэтому я хочу передать фабричный метод страницы служебному методу и проверить наличие веб-элемента

1 Ответ

0 голосов
/ 10 июня 2019

Я предполагаю, что вы используете 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...