【发布时间】:2019-02-14 10:39:52
【问题描述】:
我正在尝试使用 Enum 来设置可能距离的有限列表,该字符串在 Selenium API 方法中用作 cssSelector:
public enum DistanceFrom {
FIVEMILES("a[data-reactid='.2cr8yg16ohc.2.1.0.2:$5.0']"),
TENMILES("a['.2cr8yg16ohc.2.1.0.2:$10.0.2']"),
TWENTYMILES("a['.2cr8yg16ohc.2.1.0.2:$20.0']"),
THIRTYMILES("a['.2cr8yg16ohc.2.1.0.2:$30.0']");
private String value;
DistanceFrom(String value){
this.value=value;
}
@Override
public String toString(){
return value;
}
}
我在测试中使用它:
local.setDistance(DistanceFrom.FIVEMILES.toString());
其中 setDistance 是页面对象中的流畅方法:
public LocalNewsPage setDistance(String value) {
WebElement setDistanceButton = driver.findElement(By.cssSelector(value));
setDistanceButton.click();
return this;
}
为什么我必须声明:
local.setDistance(DistanceFrom.FIVEMILES.toString());
而且不能简单:
local.setDistance(DistanceFrom.FIVEMILES);
【问题讨论】:
-
因为
setDistance需要String。如果您希望它接受DistanceFrom并使用其toString方法,则必须显式覆盖setDistance以接受它并使用其toString方法。