首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分层存储常量的最佳实践

分层存储常量的最佳实践
EN

Stack Overflow用户
提问于 2017-08-14 09:07:31
回答 1查看 78关注 0票数 1

目前,我正在进行网络测试,使用WebDriver模拟浏览器。这个WebDriver必须经常查找HTML元素,其中许多元素通常是相同的(例如,某个按钮、表单字段等等)。WebDriver需要Selenium的By类的一个对象才能使用findElement()

我认为,如果有一个enum接口存储配置好的By实例,那么它的可读性和适应性会更好,可以用来定位元素。在测试中,反复进行硬编码的findElement(By.id("elementid"))转化为findElement(WebGui.Login.SUBMIT_BUTTON),其中WebGui.Login.SUBMIT_BUTTON可以返回一个By实例,搜索ID、名称、CSS类等所必需的内容,而不涉及只需要元素的测试本身。

问题一个层次结构似乎最适合代表网站的不同部分,但是枚举不能继承任何东西。哪种方式是最干净的方法和/或最佳实践?

嵌套Enum作为枚举不能继承getBy()和构造函数,因此必须在每个嵌套枚举中定义它们,从而成为更多的冗余代码。

代码语言:javascript
复制
public enum WebGui {
    BUTTON1(By.id("button1")),
    SEND_BUTTON(By.name("sendButton"));

    private By searchCriteria;

    WebGui(By by) {
        searchCriteria = by;
    }

    public By getBy() {
        return searchCritera;
    }

    private enum SubPage {
        BUTTON2(By.id("button2")),
        SEND_BUTTON(By.linkText("Send"));

        private By searchCriteria;

        WebGui(By by) {
            searchCriteria = by;
        }

        public By getBy() {
            return searchCritera;
        }
    }
}

使用这种方法的嵌套接口/抽象类似乎不那么“干净”,不能提供类型安全(尽管这里不太相关),而且常常被称为不良实践,因为存储一组固定的可用常量是枚举的目的。

编辑嵌套接口不能是私有的,因此将外部interface改为abstract class

代码语言:javascript
复制
public abstract class WebGui {
    By BUTTON1 = By.id("button1");
    By SEND_BUTTON = By.name("sendButton");

    private interface SubPage {
        By BUTTON2 = By.id("button2");
        By SEND_BUTTON = By.linkText("Send");
    }
}

由于嵌套接口的代码要少得多,而且其成员不需要函数,使用它似乎是更好的选择,但与包含冗余代码的嵌套枚举相比,这是一种糟糕的做法。

EN

回答 1

Stack Overflow用户

发布于 2019-07-29 23:29:00

您可以让枚举实现一个接口,就像我对这个question的回答一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45671024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档