2017-03-07 21 views
0

我使用的是用java硒,我試圖找到一種更好的方式有單選按鈕硒的Java,恆

工作在這個例子中通用的方法,我與一組三個單選按鈕的同名

<input type="radio" name="test" value="1" />Foo 
<input type="radio" name="test" value="2" />Bar 
<input type="radio" name="test" value="3" />Foobar 

我想作擴展一個類(或使用)硒webelement能夠無需一旦它宣佈要依靠價值更方便地使用這個。 因此,像(語法可能不存在,但它可能給你的,我想什麼來實現的想法),使用它像

myRadioInstance.isSelected(myRadioInstance.FOO); 
myRadioInstance.select(myRadioInstance.FOO); 

做一些

MyRadio myRadioInstance = new MyRadio(By.ByName("test")) { 
    declareValues() { 
     FOO(1); 
     BAR(2); 
     FOOBAR(3); 
    } 
}; 

並經過所以,我不必在我的代碼中的任何地方硬編碼,Foo的值是2,並且只會用於這個特定的收音機。

如果可能的話,我想依靠somesort的常量或枚舉ins的字符串「Foo/Bar/Foobar」來防止錯誤的最大值一旦聲明。

這是可以在java中完成的東西,或者我只是夢見不可能的東西嗎?

謝謝

回答

1

由於在Java中,我們不能直接產生在運行時varibales,這幾乎是不可能創造與常量或枚舉了不同數量的無線電元件一類。

Is it possible to create variables at runtime in Java?

我們可以用地圖來創建一個通用類,它可以處理無線電做到最好。

public class MyRadio { 
    // map to store radios 
    Map<String, WebElement> elementMap = new HashMap<String, WebElement>(); 

    MyRadio(By by) { 
     // find all radios 
     List<WebElement> elements = driver.findElements(by); 
     // iterate through radios and add to a map 
     for (WebElement element: elements) { 
      elementMap.put("radio"+element.getAttribute("value"), element); 
     }  
    } 

    public WebElement getRadio(String radioName) { 
     if (elementMap.contains(radioName)) { 
      return elementMap.get(radioName); 
     } 
     // might want to throw a custom exception here like noRadioFoundException 
     return null; 
    } 
} 


MyRadio myRadioInstance = new (By.ByName("test")); 
myRadioInstance.getRadio("radio1"); 
myRadioInstance.getRadio("radio2"); 

地圖上收音機的名稱是radio + radio value。我們可以根據您的意願改變它。

我們可以添加驗證方法,如radioFound(radioName),getAllRadioNames(),以使該類健壯。