Selenium WebDriver中以十六进制格式的getCssValue(Color)

时间:2013-10-29 20:54:33

标签: java selenium selenium-webdriver

在以下代码中,我需要在color中打印Hex format

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

Second 语句在Hex中显示#666666

的值

但我手动将值输入第二个打印语句102,102,102

有没有办法将我从第一个语句(Color)获得的值传递给第二个print语句并得到结果?

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

3 个答案:

答案 0 :(得分:7)

首先引用Selenium的文档。

  

获取给定CSS属性的值。应返回颜色值   作为rgba字符串,例如,如果“background-color”属性是   在HTML源代码中设置为“green”,返回的值将为“rgba(0,   255,0,1)“。注意速记CSS属性(例如背景,   字体,边框,边框顶部,边距,边距顶部,填充,填充顶部,   列表样式,大纲,暂停,提示)不返回,按照   DOM CSS2规范 - 你应该直接访问longhand   用于访问所需值的属性(例如background-color)。

然后这不是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);

答案 1 :(得分:7)

方式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);

方式2:

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

答案 2 :(得分:2)

代码有效,但只是一个小错字。 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);