【问题标题】:Returning a string literal from an Enum从枚举返回字符串文字
【发布时间】: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 方法。

标签: java string enums


【解决方案1】:

如果您可以编辑setDistance 方法,则可以将其更改为接受DistanceFrom

public LocalNewsPage setDistance(DistanceFrom value) {
    WebElement setDistanceButton = driver.findElement(By.cssSelector(value.toString()));
    setDistanceButton.click();
    return this;
}

或者,您可以将DistanceFrom 中的枚举值更改为static final Strings:

public final class DistanceFrom {

    public static final String FIVEMILES = "a[data-reactid='.2cr8yg16ohc.2.1.0.2:$5.0']";
    public static final String TENMILES = "a['.2cr8yg16ohc.2.1.0.2:$10.0.2']";
    public static final String TWENTYMILES = "a['.2cr8yg16ohc.2.1.0.2:$20.0']";
    public static final String THIRTYMILES = "a['.2cr8yg16ohc.2.1.0.2:$30.0']";

    private DistanceFrom() {}
}

【讨论】:

  • 它正盯着我看!谢谢。
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多