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 разных способа достижения того же результата и доступны по выбору пользователя.