9

在下面的代码中,我需要打印colorin Hex format

第一个Print 语句以.RGB格式显示值rgb(102,102,102)

第二条语句显示的价值Hex#666666

但是我手动将值输入到第二个打印语句中,即102,102,102.

有什么方法可以将我从第一个语句(颜色)中获得的值传递给第二个打印语句并获得结果?

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Google {

    public static void main(String[] args) throws Exception {

        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.google.com/");
        String Color = driver.findElement(By.xpath("//div[@class='gb_e gb_f gb_g gb_xb']/a")).getCssValue("color");
        System.out.println(Color);
        String hex = String.format("#%02x%02x%02x", 102,102,102);
        System.out.println(hex);
    }
}
4

4 回答 4

14

我知道这已经很老了,但是您可以使用以下方法获得更简单的解决方案org.openqa.selenium.support.Color

import org.openqa.selenium.support.Color;
String color = driver.findElement(By.xpath("//div[@class='gb_e gb_f gb_g gb_xb']/a")).getCssValue("color");
System.out.println(color);
String hex = Color.fromString(color).asHex();
System.out.println(hex);

它为您提供单行解决方案,甚至在需要时添加前导零(以前的答案没有考虑到)

于 2017-05-08T14:25:53.027 回答
9

方式1:使用StringTokenizer:

String color = driver.findElement(By.xpath("//div[@class='gb_e gb_f gb_g gb_xb']/a")).getCssValue("color");
String s1 = color.substring(4);
color = s1.replace(')', ' ');
StringTokenizer st = new StringTokenizer(color);
int r = Integer.parseInt(st.nextToken(",").trim());
int g = Integer.parseInt(st.nextToken(",").trim());
int b = Integer.parseInt(st.nextToken(",").trim());
Color c = new Color(r, g, b);
String hex = "#"+Integer.toHexString(c.getRGB()).substring(2);
System.out.println(hex);

方式二:

String color = driver.findElement(By.xpath("//div[@class='gb_e gb_f gb_g gb_xb']/a")).getCssValue("color");
String[] numbers = color.replace("rgb(", "").replace(")", "").split(",");
int r = Integer.parseInt(numbers[0].trim());
int g = Integer.parseInt(numbers[1].trim());
int b = Integer.parseInt(numbers[2].trim());
System.out.println("r: " + r + "g: " + g + "b: " + b);
String hex = "#" + Integer.toHexString(r) + Integer.toHexString(g) + Integer.toHexString(b);
System.out.println(hex);
于 2014-01-23T11:51:43.507 回答
7

首先引用 Selenium 的文档。

获取给定 CSS 属性的值。颜色值应作为 rgba 字符串返回,因此,例如,如果 HTML 源代码中的“background-color”属性设置为“green”,则返回值将是“rgba(0, 255, 0, 1)”。请注意,根据 DOM CSS2 规范,不返回速记 CSS 属性(例如 background、font、border、border-top、margin、margin-top、padding、padding-top、list-style、outline、pause、cue) - 您应该直接访问普通属性(例如背景颜色)以访问所需的值。

那么这不是 Selenium 特定的问题,这只是一个关于如何将字符串解析rgba(102,102,102)为三个数字的一​​般编程问题。

// Originally untested code, just the logic.
// Thanks for Ripon Al Wasim's correction.

String color = driver.findElement(By.xpath("//div[@class='gb_e gb_f gb_g gb_xb']/a")).getCssValue("color");

String[] numbers = color.replace("rgba(", "").replace(")", "").split(",");
int r = Integer.parseInt(numbers[0].trim());
int g = Integer.parseInt(numbers[1].trim());
int b = Integer.parseInt(numbers[2].trim());
System.out.println("r: " + r + "g: " + g + "b: " + b);

String hex = "#" + Integer.toHexString(r) + Integer.toHexString(g) + Integer.toHexString(b);
System.out.println(hex);
于 2013-10-29T21:05:30.023 回答
4

该代码有效,但只是一个小错字。Color.fromString 将是大写 C

import org.openqa.selenium.support.Color;

String color = driver.findElement(By.xpath("xpath_value")).getCssValue("color");
System.out.println(color);
String hex = Color.fromString(color).asHex();
System.out.println(hex);
于 2017-05-23T20:08:05.737 回答