Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
453 views
in Technique[技术] by (71.8m points)

java - How to convert #ffffff to #fff or #fff to #ffffff while asserting the background color rgb(255,255,255) returned by Selenium getCssValue("background")

How to convert #ffffff to #fff or #fff to #ffffff for Assertion?

I am using getCssValue("background") from Selenium which returns rgb(255, 255, 255) which I can split into:

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

The following line of code:

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

Converts rgb to hex and gives an output as:

#ffffff

But from the console, the background is extracted as #fff

fff

So what can be the ideal way either to:

  • convert #ffffff to #fff
  • convert #fff to #ffffff

I have been through a couple of relevant discussions as:

But my tests are failing and there is a need for conversion. Any recommendations?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can use replaceAll with a regular expression that looks for the case where all three parts use the same digit:

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");
}

That looks for a string starting with # followed by three pairs of matching hex digits, and replaces them with just the short form. (I suppose I could have just used [a-f] instead of [a-fA-F] in your specific example, since you know you'll be getting lower case only, but...)

Complete example (on 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");
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...