Моя проблема отличается от того, что было опубликовано:
Я уже сделал это 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();
Значения элементов аннотации должны быть разрешены компилятором во время компиляции. Недостаточно того, что user_email
является статическим окончательным, его значение должно быть константой времени компиляции, то есть строковым литералом или конкатенацией константных выражений. Выражение CONFIG.getProperty("user_email")
не разрешается до запуска, поэтому вы не можете использовать его для значения аннотации.
Точное определение "константного выражения" приведено в Спецификации языка Java:
Постоянное выражение времени компиляции представляет собой выражение, обозначающее значение примитивного типа или String, которое не завершается внезапно и составлено, используя только следующее:
[...]
- Квалифицированные имена (§6.5.6.2) формы TypeName. Идентификатор, который ссылается на постоянные переменные (§4.12.4).
Если "постоянная переменная" является "переменной примитивного типа или типа String, которая является окончательной и инициализируется выражением постоянной времени компиляции",
(да, эти определения являются круговыми, а в случае строк вы, в конечном счете, должны опускаться в цитированном строковом литерале или выражении, которое объединяет ряд других константных выражений).
public static final String user_email = CONFIG.getProperty("user_email");
Я должен передать значение напрямую, как этаpublic static final String user_email = "//*[@id='user_email']"
. Или есть ли обходной путь, чтобы я мог передать значение с помощью файла свойств CONFIGWebDriver
самостоятельно, а не использовать аннотацииPageFactory
.