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

yk9xbfzb  于 2023-04-08  发布在  Java
关注(0)|答案(5)|浏览(111)

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

  • 第一个 * 打印语句以RGB显示值,即rgb(102,102,102)
  • Second* 语句显示Hex中的值,即#666666

但是我在第二个print语句中手动输入了值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);
    }
}
wribegjk

wribegjk1#

我知道这是相当古老的,但你可以通过使用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);

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

wz1wpwve

wz1wpwve2#

方法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);
ztyzrc3y

ztyzrc3y3#

首先引用Selenium的文档。
获取给定CSS属性的值。颜色值应该作为rgba字符串返回,因此,例如,如果“background-color”属性在HTML源代码中设置为“绿色”,则返回值将为“rgba(0,255,0,1)”。请注意,简写CSS属性(例如background,font,border,border-top,margin,margin-top,padding,padding-top,list-style,outline,pause,cue)不返回,根据DOM CSS 2规范-您应该直接访问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);
6ss1mwsb

6ss1mwsb4#

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

dwbf0jvd5#

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

只要一个简单和甜蜜的代码将帮助你得到一个答案

相关问题