簡體   English   中英

分層存儲常量的最佳實踐

[英]Best practice to hierarchically store constants

目前,我正在使用WebDriver來模擬瀏覽器,以進行網絡測試。 該WebDriver必須經常查找HTML元素,其中許多元素通常是相同的(即某個按鈕,表單字段等)。 WebDriver需要Selenium的By類的對象才能使用findElement()

我認為,如果有一個枚舉接口存儲配置的By實例可以用於定位元素,那么這對於可讀性和適應性會很好。 在測試中,反復硬編碼findElement(By.id("elementid"))變成findElement(WebGui.Login.SUBMIT_BUTTON) ,其中WebGui.Login.SUBMIT_BUTTON可能返回的實例。 By搜索ID,名稱,CSS類等等,而不必考慮僅需要元素的測試本身。

問題層次結構似乎可以代表網站的不同部分,但是枚舉不能繼承任何內容。 哪種方法是最干凈的方法和/或最佳實踐?

嵌套枚舉由於枚舉不能繼承getBy()和構造函數,因此必須在每個嵌套枚舉中定義它們,因此是更加冗余的代碼。

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

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");
    }
}

由於嵌套接口的代碼少得多,並且其成員不需要功能,因此使用嵌套接口似乎是更好的選擇,但是與包含冗余代碼的嵌套枚舉相比,這樣做有多不好。

您可以讓枚舉實現類似我對這個問題的答案的接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM