java - 如何在断言 Selenium getCssValue ("background"返回的背景色 rgb(255,255,255) 时将#ffffff 转换为#fff 或将#fff 转换为#ffffff

标签 java html css selenium optimization

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

我正在使用 getCssValue("background")Selenium 返回 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

我经历过一些相关的讨论:

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

最佳答案

您可以将 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],因为你知道你'只会变得小写,但是......)

完整示例(在 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");
    }
}

关于java - 如何在断言 Selenium getCssValue ("background"返回的背景色 rgb(255,255,255) 时将#ffffff 转换为#fff 或将#fff 转换为#ffffff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54767206/

相关文章:

带有 If/Else 语句的 Jquery slideToggle

html - 将多个内联单选按钮组与标签垂直对齐 (Bootstrap 3)

java - 在 Android 应用程序中使用 argon2 会出现 UnsatisfiedLinkError

java - Hibernate中如何设置外键实体

java - 获取错误致命 java.lang.RuntimeException : Unable to start activity

php - Magento Minicart 显示空白

java - Google App Engine 简单应用程序已创建并在本地运行。但我无法部署到 App Engine

html - 中间带有图标的分隔线不会跨越 div 的宽度

css - 页脚 ul 边缘渗入 body ......有时

html - 使用 Bootstrap 固定页面高度