将字符串列表与属性文件中的特定键值进行比较

时间:2016-08-03 12:37:15

标签: java selenium-webdriver internationalization resourcebundle

我的场景是检查字符串是否已本地化或使用Selenium自动化与java,我有属性文件A“键和值(xpaths)”和Properties_en文件B(ResourceBundle),这里是我有翻译的字符串用“键和值(字符串)”。

我使用了属性文件A并将web UI中的字符串列表读入ArrayList函数。

字符串列表

  1. 名字
  2. 姓氏
  3. 电话
  4. 现在我想将该字符串列表与特定的Key&#34进行比较;例如:LIST _"及其在Properties_en文件B上的值(字符串)。

    Properties_en文件B(ResourceBundle)

    1. LIST_FIRST_NAME =名字
    2. LIST_LAST_NAME =姓氏
    3. LIST_PHONE =电话
    4. 这里我需要将字符串列表与包含" LIST _"的所有Properties_en.properties键进行比较。并验证字符串列表是否也存在于Properties_en文件中。

      有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:0)

您可以使用substring仅从ArrayList中获取所需的字符串。 您知道,从列表A开始,第一个元素是名字。现在,从List中你知道第一个元素是LIST_First_Name。为了比较它们,您需要为List B

中的第一个元素创建子字符串
List[0].substring(5) 

并且在消除前6个字符(即名字)后将返回剩余的字符串。 我希望这是你想知道的。

答案 1 :(得分:0)

您需要读取资源包文件并将其密钥存储在一个集合中。阅读文件时,您需要将每个字符串拆分为' ='并且只存储第一部分:set.add(line.split(' =')[0])。该集合将包含{LIST_FIRST_NAME,LIST_LAST_NAME,...}。

然后你应该阅读你的第一个文件,并且你需要测试每个字段是否存在于一个集合中。但首先,您需要将此字符串转换为LIST_FIELD_NAME_UPPERCASE_WITH_DASHES格式(注意,这与ResourceBundle文件中的键格式匹配)

如果集合包含此字段,则此字段已本地化。

大纲是这样的:

private Set<String> constructSet(Reader r) {
    String line;
    Set<String> result = new HashSet<>()
    while(null != (line = reader.readLine())
    {
        String[] keyValue = line.split('=');
        if (null != keyValue[1])
            result.add(keyValue[0]);
    }

    return result;
}

public boolean test(Reader fileWithStringsReader, Reader resourceBundleReader)
{
    String line;
    Set<String> localizedKeys = constructSet(resourceBundleReader);
    while (null != (line = fileWithStringsReader.readLine()) 
    {
         if (!localizedKeys.contains(transformLine(line))
              return false;
    }

    return true;
}

private String transformLine(String line)
{
    if (null == line)
        return line;

    String[] splitLine = line.split(' ');
    return "LIST_" + StringUtils.join(splitLine, "_").toUpperCase();
}