2013-12-12 20 views
7

Hallo bekommen alles, was ich bin versucht, Rahmenfarbe eines extjs 4.2 Formularsteuertextfeld mit getCssValue Methode zu erhalten. Aber ich kann es nicht holen. es bringt mich leer zurück. Unten ist mein Code-Snippet, das du ausprobieren kannst.Selen WebDriver Grenze Farbe

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 Version 2.33 (Java-Bindung)

22 FF

Antwort

4

enter image description here Wie Grenze Farbe oder andere CSS-Werte aussehen in Compute erhalten d gibt es alle Werte, die Sie bekommen können:

getCssValue("border-bottom-color") 

kehrt rgba (209, 219, 223, 1) und um es löschen müssen (dies ist für rgba und rgb funktioniert):

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

Jetzt ist unsere rgb in Array ist mit dieser Methode es

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

Von diesem rgba (209, 219, 223, 1) wir D1D erhielt diese # zu analysieren BDF

P. S. Source of parsing int rgb to hex

+0

Dank @Andrian enthalten. Aber kann ich wissen, warum wir nicht in der Lage sind, die ursprüngliche Grenzfarbeneigenschaft nur für mein Wissen zu bekommen? –

+0

Hier ist Ihre Antwort: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getCssValue(java.lang.String) Ich weiß nicht, warum sie sich entschieden haben, rgb zurückzugeben, aber sie haben diesen Standard gewählt. –

2

Es scheint mit element.getCssValue ein Problem zu sein ("border-color") mit einem Firefox-Treiber . Dies ist darauf zurückzuführen, dass CSS-Kurzform-Eigenschaften (z. B. Rand, Hintergrund, Rahmen) nicht unterstützt werden.

Für Firefox Sie

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

Der Code wird auszudrucken 'rgba (207, 76, 53, 1)'

Mit einem ChromeDriver eingeben müssen, wird erhalten Ihr Wert.

Ihre aktuellen Code auszudrucken 'rgb (207, 76, 53)'

Um die ChromeDriver setzen Sie könnten diese Zeile hinzufügen müssen, bevor Sie Ihre Treiber erklären

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

Sie können die ChromeDriver hier herunterladen http://chromedriver.storage.googleapis.com/index.html

+0

hallo Lt_Shade wir erwägen nicht einmal Chrom zum Testen. Also kann ich diese Antwort nicht akzeptieren. Wenn du Probleme mit Firefox hast, lass es mich wissen. TIA !! –

+0

Ich habe eine Firefox Abhilfe in der Antwort –

+1

Dank Lt_shade –