Selenium WebDriver 获取边框颜色

Posted

技术标签:

【中文标题】Selenium WebDriver 获取边框颜色【英文标题】:Selenium WebDriver get border color 【发布时间】:2013-12-30 08:56:00 【问题描述】:

大家好,我正在尝试使用 getCssValue 方法获取 extjs 4.2 表单控件文本字段的边框颜色。但我无法获取它。它让我空白。下面是我的代码 sn-p 你可以试试这个。

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

public class TestClass 

    public static void main(String[] args) throws InterruptedException
    
        WebDriver driver=new FirefoxDriver();
        Thread.sleep(2000);
        driver.get("http://docs.sencha.com/extjs/4.2.1/extjs-build/examples/form/dynamic.html");
        Thread.sleep(2000);
        WebElement element=driver.findElement(By.xpath(".//input[@name='first']"));
        Thread.sleep(2000);
        element.sendKeys("");
        element.sendKeys(Keys.TAB);
        Thread.sleep(2000);
        System.out.println("'"+element.getCssValue("border-color")+"'");
    

Webdriver 2.33 版(Java 绑定)

FF 22

【问题讨论】:

【参考方案1】:

如何获取边框颜色或其他 css 值在 Computed 中可以获得所有值:

getCssValue("border-bottom-color")

返回 rgba(209, 219, 223, 1) 并需要清除它(这将适用于 rgba 和 rgb):

String rgb[] = driver.findElement(By.name("login[email]")).getCssValue("border-bottom-color").replaceAll("(rgba)|(rgb)|(\\()|(\\s)|(\\))","").split(",");

现在我们的 rgb 在数组中,使用这个方法来解析它

String hex = String.format("#%s%s%s", toBrowserHexValue(Integer.parseInt(rgb[0])), toBrowserHexValue(Integer.parseInt(rgb[1])), toBrowserHexValue(Integer.parseInt(rgb[2])));

private static String toBrowserHexValue(int number) 
        StringBuilder builder = new StringBuilder(Integer.toHexString(number & 0xff));
        while (builder.length() < 2) 
            builder.append("0");
        
        return builder.toString().toUpperCase();
    

从这个 rgba(209, 219, 223, 1) 我们得到了这个 #D1DBDF

附: Source of parsing int rgb to hex

【讨论】:

谢谢@Andrian。但是我能知道为什么我们不能仅凭我的知识就获得原始的边框颜色属性吗? 这是你的答案:selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…我不知道他们为什么选择返回rgb,但他们选择了这个标准。【参考方案2】:

使用 Firefox 驱动程序的 element.getCssValue("border-color") 似乎存在问题。这是因为不支持速记 CSS 属性(例如边距、背景、边框)。

对于 Firefox,您需要输入

System.out.println("'"+element.getCssValue("border-top-color")+"'");

代码会打印出'rgba(207, 76, 53, 1)'

使用 ChromeDriver 来获得您的价值。

您当前的代码将打印出 'rgb(207, 76, 53)'

要设置 ChromeDriver,您可能需要在声明驱动程序之前添加此行

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver.exe");
WebDriver driver=new ChromeDriver();

你可以从这里http://chromedriver.storage.googleapis.com/index.html下载ChromeDriver

【讨论】:

嗨 Lt_Shade 我们甚至没有考虑使用 chrome 进行测试。所以我不能接受这个答案。如果您有 Firefox 的解决方法,请告诉我。蒂亚!!

以上是关于Selenium WebDriver 获取边框颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium WebDriver 和 python 获取 Web 元素的颜色?

Selenium webdriver 在单击之前突出显示元素

Selenium-Webdriver:找到元素后获取属性

scrapy中使用selenium+webdriver获取网页源码,爬取简书网站

scrapy中使用selenium+webdriver获取网页源码,爬取简书网站

selenium webdriver学习,选择模块,点击下一页,获取当前url