在以下代码中,我需要在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);
}
}
答案 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);