2017-03-07 16 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(),以使该类健壮。