如何在声明Selenium getCssValue(“ background”)返回的背景色rgb(255,255,255)的同时将#ffffff转换为#fff或#fff转换为#ffffff

时间:2019-02-19 13:14:43

标签: java html css selenium optimization

如何将#ffffff转换为#fff或将#fff转换为#ffffff进行断言?

我正在使用 Selenium 中的getCssValue("background"),它返回rgb(255, 255, 255),我可以将其拆分为:

  • r-> 255
  • g-> 255
  • b-> 255

下面的代码行:

String hex = String.format("#%02x%02x%02x", r, g, b);

rgb 转换为 hex 并给出如下输出:

#ffffff

但是从控制台中,背景被提取为 #fff

fff

那么什么是以下理想的方式?

  • #ffffff转换为#fff
  • #fff转换为#ffffff

我经历了一些相关的讨论,

但是我的测试失败了,需要进行转换。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可以将replaceAll与正则表达式一起使用,以查找所有三个部分使用相同数字的情况:

static String getHex(int r, int g, int b) {
    return String.format("#%02x%02x%02x", r, g, b).replaceAll("^#([a-fA-F])\\1([a-fA-F])\\2([a-fA-F])\\3$", "#$1$2$3");
}

寻找一个以#开头的字符串,然后是三对匹配的十六进制数字,然后将它们替换为短格式。 (我想在您的特定示例中,我可能只使用[a-f]而不是[a-fA-F],因为您知道您只会使用小写字母,但是...)< / p>

完整示例(在Ideone上):

public class Example {
    public static void main(String[] args) {
        System.out.println(getHex(255, 255, 255)); // #fff
        System.out.println(getHex(255, 240, 255)); // #fff0ff
    }

    static String getHex(int r, int g, int b) {
        return String.format("#%02x%02x%02x", r, g, b).replaceAll("^#([a-fA-F])\\1([a-fA-F])\\2([a-fA-F])\\3$", "#$1$2$3");
    }
}

答案 1 :(得分:3)

您可以编写一个简单的方法,将HTML颜色代码“标准化”为短格式或长格式 ,如果它们都具有相同的十六进制数字:

public static void main(String[] args) {
    System.out.println(normalizeHtmlColors("#ffffff", true));
    System.out.println(normalizeHtmlColors("#fff", true));
    System.out.println(normalizeHtmlColors("#ffffff", false));
    System.out.println(normalizeHtmlColors("#fff", false));
}

public static String normalizeHtmlColors(String colorCode, boolean toShort) {
    if (toShort && colorCode.matches("^#?([0-9a-fA-F])\\1{5}$"))
        colorCode = colorCode.replaceFirst("#?([0-9a-fA-F])\\1{5}", "#$1$1$1");
    else if (!toShort && colorCode.matches("^#?([0-9a-fA-F])\\1{2}$"))
        colorCode = colorCode.replaceFirst("#?([0-9a-fA-F])\\1{2}", "#$1$1$1$1$1$1");
    return colorCode;
}

这将打印:

#fff
#fff
#ffffff
#ffffff

...因此您可以决定向哪个方向转换。如果输入的两种情况不匹配,则将返回它。