Является ли @FindBy (id = 'blabla') тем же, что и // * [@ id = 'blabla] - PullRequest
1 голос
/ 28 октября 2019

Я решил попробовать Katalon и получил этот вопрос, потому что Katalon Studio, когда пользователь выбирает «locate by attribute 'id'», показывает, что //*[@id='blabla'] будет использоваться для определения местоположения элемента. Но для меня это выглядит как вариант xPath. Так что мне интересно, когда в JAVA - Selenium я пишу @findBy (id='blabla') - под капотом селена конвертируем его в //*[@id = 'blabla'] ???

Не могу найти ответ

Google, форумы, документы каталона

ОБНОВЛЕНИЕ: Я хочу знать, являются ли эти два метода абсолютно одинаковыми. 1. Потребуется ли столько же времени, чтобы найти элемент? 2. Оба метода начнут искать элемент сверху DOM?

Ответы [ 2 ]

3 голосов
/ 28 октября 2019

Функционально все они делают одно и то же:

  • Аннотация @FindBy(id = "foo")
  • driver.findElement(By.id("foo"))
  • driver.findElement(By.xpath("//*[@id = 'foo']"))
  • driver.findElement(By.css("#foo"))

Все они находят элемент по его идентификатору.

Я не уверен, что это означает в вызовах API для Selenium Server, но Selenium открытисточник . Попробуйте сами.

Аннотация @FindBy(...) определена в FindBy.java , который наследуется от AbstractFindByBuilder . Проследите код, и вы поймете это.

1 голос
/ 28 октября 2019

Это эквивалент. (Но это может зависеть от конкретных привязок Selenium)

Если посмотреть на By класс библиотеки Selenium Java, вы можете увидеть код, подобный следующему:

public List<WebElement> findElements(SearchContext context) {
    return context instanceof FindsById ? ((FindsById)context).findElementsById(this.id) : ((FindsByXPath)context).findElementsByXPath(".//*[@id = '" + this.id + "']");
}

Один элементlookup просто использует поиск коллекции.

...