Значение атрибута аннотации FindBy.xpath должно быть константным выражением [duplicate]

1

Моя проблема отличается от того, что было опубликовано:

  1. значение для атрибута аннотации должно быть постоянным выражением ИЛИ
  2. Значение атрибута аннотации Min.value должно быть константным выражением

Я уже сделал это final и static но это дает мне эту ошибку при зависании над ней.
Вот мой код:
Login.java

@FindBy(xpath = Constants.user_email)
public static WebElement user_email;

Constants.java

public static final String user_email= CONFIG.getProperty("user_email");

Я попытался исправить это: я изменил это public static Properties CONFIG = new Properties(); к этому public static final Properties CONFIG = new Properties();

Теги:
properties-file
final

1 ответ

0
Лучший ответ

Значения элементов аннотации должны быть разрешены компилятором во время компиляции. Недостаточно того, что user_email является статическим окончательным, его значение должно быть константой времени компиляции, то есть строковым литералом или конкатенацией константных выражений. Выражение CONFIG.getProperty("user_email") не разрешается до запуска, поэтому вы не можете использовать его для значения аннотации.

Точное определение "константного выражения" приведено в Спецификации языка Java:

Постоянное выражение времени компиляции представляет собой выражение, обозначающее значение примитивного типа или String, которое не завершается внезапно и составлено, используя только следующее:

[...]

  • Квалифицированные имена (§6.5.6.2) формы TypeName. Идентификатор, который ссылается на постоянные переменные (§4.12.4).

Если "постоянная переменная" является "переменной примитивного типа или типа String, которая является окончательной и инициализируется выражением постоянной времени компиляции",

(да, эти определения являются круговыми, а в случае строк вы, в конечном счете, должны опускаться в цитированном строковом литерале или выражении, которое объединяет ряд других константных выражений).

  • 0
    Так что я не могу использовать public static final String user_email = CONFIG.getProperty("user_email"); Я должен передать значение напрямую, как эта public static final String user_email = "//*[@id='user_email']" . Или есть ли обходной путь, чтобы я мог передать значение с помощью файла свойств CONFIG
  • 0
    @paul Нет, если это должна быть аннотация. Если вы хотите использовать XPath, которые не являются константами времени компиляции, вам придется вызывать методы WebDriver самостоятельно, а не использовать аннотации PageFactory .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню