2013-12-12 11 views
7

こんにちはすべて私は、getCssValueメソッドを使用してextjs 4.2フォームコントロールのテキストフィールドの境界線の色を取得しようとしています。しかし、私はそれをフェッチすることはできません。それは私を空白に戻している。以下は私のコードスニペットですが、これを試してみることができます。Selenium WebDriver border color

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")+"'"); 
    } 
} 

Field, Xpath and CSS attribute highlighted in black border

webdriverをバージョン2.33(Javaバインディング)

FF 22

答えて

4

enter image description here からChromeDriverをダウンロードすることができ計算に見えます

getCssValue("border-bottom-color") 

返しRGBA(209、219、223、1)と、それをクリアする必要があります(これはRGBAとRGBのために動作します):Dあなたが得ることができるすべての値があります

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

は今私達のRGBこのRGBA(209、219、223、1)から

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

を、それを解析するために、このメソッドを使用してアレイである我々はこの#のD1Dを得ましたBDF

P. Source of parsing int rgb to hex

+0

Thanks @ Andrian。しかし、私が知っているだけの理由で元のボーダーカラープロパティを取得できない理由を知ることができますか? –

+0

ここにあなたの答えはあります:http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getCssValue(java.lang.String) 私は知らないなぜ彼らがrgbを返そうとしたのか、彼らはこの標準を選んだのです。 –

2

Firefoxのドライバを使用してelement.getCssValue( "ボーダー色")との問題があるようです。これは、ショートカットCSSプロパティ(マージン、背景、枠線など)がサポートされていないためです。取得するChromeDriverを使用して、Firefoxがあなたはコードが出力します

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

を入力する必要がありますについては

'RGBA(207、76、53、1)'

あなたの価値。

あなたの現在のコードは、'RGB(207、76、53')を出力します

ChromeDriverあなたが宣言する前に、あなたのドライバの行を追加する必要があるかもしれませんを設定するには

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

ます境界線の色や他のCSS値を取得するにはどのようにここにhttp://chromedriver.storage.googleapis.com/index.html

+0

こんにちは、私たちはテストのためにクロムを考慮していません。だから私はこの答えを受け入れることはできません。もしあなたにfirefoxのための回避策があるなら、私に知らせてください。 TIA !! –

+0

答えにFirefoxの回避策を含めました –

+1

ありがとうLt_shade –