how = How.ID в селене

У меня один маленький вопрос, в чем разница между следующими строками в Selenium и Page Factory?

@FindBy(id = "foobar") WebElement foobar;

А также

@FindBy(how = How.ID, using = "foobar") WebElement foobar;

1 ответ

Согласно JavaDocs типа аннотации FindBy оба выражения:

@FindBy(id = "foobar") WebElement foobar;

а также

@FindBy(how = How.ID, using = "foobar") WebElement foobar;

Оба выражения указывают на один и тот же элемент.

Модификатор Как

Как определяется в org.openqa.selenium.support.How, расширяет java.lang.Enum<How> а также реализует java.lang.Comparable<How>, Перечисленные константы как следующие:


Обновить

В ответ на встречный вопрос, если вы посмотрите на исходный код перечисления, как он определяется как:

public enum How {
  CLASS_NAME {
    @Override
    public By buildBy(String value) {
      return By.className(value);
    }
  },
  CSS {
    @Override
    public By buildBy(String value) {
      return By.cssSelector(value);
    }
  },
  ID {
    @Override
    public By buildBy(String value) {
      return By.id(value);
    }
  },
  ID_OR_NAME {
    @Override
    public By buildBy(String value) {
      return new ByIdOrName(value);
    }
  },
  LINK_TEXT {
    @Override
    public By buildBy(String value) {
      return By.linkText(value);
    }
  },
  NAME {
    @Override
    public By buildBy(String value) {
      return By.name(value);
    }
  },
  PARTIAL_LINK_TEXT {
    @Override
    public By buildBy(String value) {
      return By.partialLinkText(value);
    }
  },
  TAG_NAME {
    @Override
    public By buildBy(String value) {
      return By.tagName(value);
    }
  },
  XPATH {
    @Override
    public By buildBy(String value) {
      return By.xpath(value);
    }
  },
  UNSET {
    @Override
    public By buildBy(String value) {
      return ID.buildBy(value);
    }
  };

  public abstract By buildBy(String value);
}

Так, например, когда вы реализуете How в сочетании с ID согласно следующей строке:

@FindBy(how = How.ID, using = "foobar") WebElement foobar;

how = How.ID функционально возвращает By.id(значение) и эквивалентно тому, что в точности возвращает следующая строка:

@FindBy(id = "foobar") WebElement foobar;

Следовательно, мы можем заключить, что @FindBy(id = "foobar") и @FindBy(how = How.ID, using = "foobar") - это всего лишь 2 разных способа достижения того же результата и доступны по выбору пользователя.

Другие вопросы по тегам