簡體   English   中英

如何參數化抽象類中的變量

[英]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))。getAttr‌ibute(“ alt”); 當i = 1時,字符串altvalue = driver.findElement(By.xpath(Properties.character_2))。getAttr‌ibute(“ alt”); 像那樣。

盡管反射是可能的,但強烈建議不要這樣做:您會失去編譯時類型的安全性,它在重構時會導致錯誤,並且性能會降低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM