selenium java,带常量的泛型方法

selenium java,带常量的泛型方法,java,selenium,constants,Java,Selenium,Constants,我将selenium与java结合使用,并试图找到一种更好的方法来使用单选按钮 在本例中,我有一组3个同名单选按钮 <input type="radio" name="test" value="1" />Foo <input type="radio" name="test" value="2" />Bar <input type="radio" name="test" value="3" />Foobar 在使用了类似的东西之后 myRadioInstanc

我将selenium与java结合使用,并试图找到一种更好的方法来使用单选按钮

在本例中,我有一组3个同名单选按钮

<input type="radio" name="test" value="1" />Foo
<input type="radio" name="test" value="2" />Bar
<input type="radio" name="test" value="3" />Foobar
在使用了类似的东西之后

myRadioInstance.isSelected(myRadioInstance.FOO);
myRadioInstance.select(myRadioInstance.FOO);
这样做,我不必在代码中的任何地方硬编码Foo的值为2,它只适用于这个特定的收音机

如果可能的话,我希望使用某种常量或枚举代替字符串来表示“Foo/Bar/Foobar”,以防止声明后出现最大错误

它是可以用java实现的,还是我只是在梦想不可能的事情


谢谢

因为在java中,我们不能在运行时直接生成变量,所以几乎不可能为不同数量的元素创建一个带有常量或枚举的类

我们所能做的最好的事情就是使用maps创建一个可以处理无线电的泛型类

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");
公共类MyRadio{
//地图存储收音机
Map elementMap=newhashmap();
我的收音机{
//查找所有收音机
列表元素=driver.findElements(按);
//迭代无线电并添加到地图
for(WebElement:elements){
elementMap.put(“radio”+element.getAttribute(“value”)、element);
}     
}
公共WebElement getRadio(字符串radioName){
if(elementMap.contains(radioName)){
返回elementMap.get(radioName);
}
//可能想在这里抛出一个自定义异常,比如noRadioFoundException
返回null;
}
}
MyRadio myRadioInstance=new(通过.ByName(“测试”));
myRadioInstance.getRadio(“radio1”);
myRadioInstance.getRadio(“radio2”);
地图中收音机的名称为
收音机+收音机值
。我们可以根据你的意愿改变它

我们可以添加验证方法,如is
radioFound(radioName)
getAllRadioNames()
,以使类更健壮

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