【问题标题】:Selenium WebDriver get border colorSelenium WebDriver 获取边框颜色
【发布时间】: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

【问题讨论】:

    标签: java css extjs selenium selenium-webdriver


    【解决方案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

    【讨论】:

    【解决方案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 的解决方法,请告诉我。蒂亚!!
    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2020-12-23
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多