我正在使用 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,并且它仅适用于这个特定的 radio 集。
如果可能的话,我想依靠某种常量或枚举插入“Foo/Bar/Foobar”字符串来防止声明后出现最大错误。
这是可以用java完成的事情还是我只是在梦想不可能的事?
谢谢
最佳答案
由于在java中我们无法在运行时直接生成变量,因此几乎不可能为不同数量的无线元素创建一个具有常量或枚举的类。
Is it possible to create variables at runtime in Java?
我们能做的最好的事情就是使用 map 创建一个可以处理 radio 的通用类。
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");
map 中 radio 的名称为 radio + radio 值
。我们可以根据您的意愿进行更改。
我们可以添加验证方法,例如 radioFound(radioName)
、getAllRadioNames()
以使类更加健壮。
关于java - selenium java,带有常量的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42651385/