selenium java,常量方法用常量

时间:2017-03-07 14:53:21

标签: 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

我想创建一个扩展(或使用)selenium webelement的类,以便能够更轻松地使用它,而不必在声明后依赖于该值。 所以类似(语法可能不存在,但它可能会让你知道我想要实现的目标)

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

使用之后

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

这样做,我不必在我的代码中硬编码Foo的值为2,它只适用于这个特定的无线电设备。

如果可能的话,我想依赖于“Foo / Bar / Foobar”的一些常量或枚举字符串,以防止一旦声明出现错误。

是否可以在java中完成,或者我只是梦想不可能?

谢谢

1 个答案:

答案 0 :(得分:1)

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

Is it possible to create variables at runtime in Java?

我们所能做的最好的事情就是使用map来创建一个可以处理无线电的通用类。

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()的验证方法,以使类健壮。