[英]how to parametrise the variable in the abstract class
我有下面的抽象类,其中取消了character_1,character_2,character_3。
public abstract class Properties {
public static final String character_1 = "//*[@class='character- nav-slide-normal'][@alt='CHARLIE E LOLA']";
public static final String character_2 = "//*[@class='character-nav-slide-normal'][@alt='PEPPA']";
public static final String character_3 = "//*[@class='character-nav-slide-normal'][@alt='FESTA HI-5']";
}
我该如何参数化并传递给属性。
String[] myStringArray = {"character_1","character_2","character_3"};
for (int i = 0; i < myStringArray.length; i++)
{
String value = myStringArray[i];
String altvalue = driver.findElement(By.xpath(Properties.value)).getAttribute("alt");
System.out.print(altvalue);
}
您可以使用一个枚举。 遵循以下原则
public enum Properties {
CHARACTER_1("//*[@class='character- nav-slide-normal'][@alt='CHARLIE E LOLA']"),
CHARACTER_2("//*[@class='character-nav-slide-normal'][@alt='PEPPA']"),
CHARACTER_3("//*[@class='character-nav-slide-normal'][@alt='FESTA HI-5']"),
CHARACTER_4("//*[@class='character-nav-slide-normal'][@alt='FESTA HI-5']"),
CHARACTER_5("//*[@class='character-nav-slide-normal'][@alt='FESTA HI-5']"),
CHARACTER_6("//*[@class='character-nav-slide-normal'][@alt='FESTA HI-5']"),
CHARACTER_7("//*[@class='character-nav-slide-normal'][@alt='FESTA HI-5']");
private String xpath;
Properties(String xpath) {
this.xpath = xpath;
}
public String getXpath() {
return xpath;
}
}
例
// Selective properties
Properties[] selectiveProperties = {Properties.CHARACTER_1, Properties.CHARACTER_3, Properties.CHARACTER_6, Properties.CHARACTER_7};
for (Properties property : selectiveProperties) {
String altvalue = driver.findElement(By.xpath(property.getXpath())).getAttribute("alt");
System.out.print(altvalue);
}
//Iterate through all the properties
for (Properties property : Properties.values()) {
String altvalue = driver.findElement(By.xpath(property.getXpath())).getAttribute("alt");
System.out.print(altvalue);
}
我想说的最简单的是使用HashMap<String, String>
。
public class Properties { //no particular use to make this class abstract
public static final Map<String, String> characters;
static
{
characters = new HashMap<String, String>();
characters.put("character_1", "//*[@class='character- nav-slide-normal'][@alt='CHARLIE E LOLA']");
characters.put("character_2", "//*[@class='character-nav-slide-normal'][@alt='PEPPA']");
characters.put("character_3", "//*[@class='character-nav-slide-normal'][@alt='FESTA HI-5']");
}
}
//somewhere else...
String[] myStringArray = {"character_1","character_2","character_3"};
for (String stringArrayString : myStringArray)
{
String xPath = Properties.characters.get(stringArrayString);
String altvalue = driver.findElement(By.xpath(xPath)).getAttribute("alt");
System.out.print(altvalue);
}
您可以轻松地使用上面的代码来解决您的问题。
但是,您的报价表明您已经有了一些想法:
我需要如何将值(即myStringArray [i])发送到Properties。 ???????? 因此,当i = 0时,字符串altvalue = driver.findElement(By.xpath(Properties.character_1))。getAttribute(“ alt”); 当i = 1时,字符串altvalue = driver.findElement(By.xpath(Properties.character_2))。getAttribute(“ alt”); 像那样。
尽管反射是可能的,但强烈建议不要这样做:您会失去编译时类型的安全性,它在重构时会导致错误,并且性能会降低。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.