[英]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.