2013-12-12 17 views
7

Xin chào tất cả tôi đang cố gắng để có được màu đường viền của một trường văn bản điều khiển dạng extjs 4.2 bằng phương thức getCssValue. Nhưng tôi không thể lấy nó. nó đang trả lại cho tôi trống. Dưới đây là đoạn mã của tôi u có thể thử này như là.Selenium WebDriver có màu biên giới

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 phiên bản 2.33 (Java ràng buộc)

FF 22

Trả lời

4

enter image description here Cách lấy màu đường viền hoặc giá trị css khác xem Tính toán d có tất cả các giá trị mà bạn có thể nhận được:

getCssValue("border-bottom-color") 

lợi nhuận rgba (209, 219, 223, 1) và cần phải xóa nó (điều này sẽ làm việc cho rgba và rgb):

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

Bây giờ rgb của chúng tôi là trong mảng sử dụng phương pháp này để phân tích nó

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

Từ rgba này (209, 219, 223, 1) chúng tôi đã nhận này # D1D BDF

P.S. Source of parsing int rgb to hex

+0

Cảm ơn @Andrian. Nhưng tôi có thể biết tại sao chúng ta không thể có được thuộc tính màu biên giới ban đầu chỉ vì kiến ​​thức của tôi? –

+0

Đây là câu trả lời của bạn: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getCssValue(java.lang.String) Tôi không biết tại sao họ chọn trả lại rgb, nhưng họ đã chọn tiêu chuẩn này. –

2

Dường như có một vấn đề với element.getCssValue ("border-color") sử dụng một điều khiển Firefox . Điều này là do các thuộc tính CSS viết tắt (ví dụ: lề, nền, đường viền) không được hỗ trợ.

Đối Firefox bạn sẽ cần phải nhập

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

Mã sẽ in ra 'rgba (207, 76, 53, 1)'

Sử dụng một ChromeDriver để có được giá trị của bạn.

mã hiện tại của bạn sẽ in ra 'rgb (207, 76, 53)'

Để đặt ChromeDriver bạn có thể cần phải thêm dòng này trước khi bạn khai báo tài xế của bạn

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

Bạn có thể tải xuống ChromeDriver từ đây http://chromedriver.storage.googleapis.com/index.html

+0

hi Lt_Shade chúng tôi thậm chí không xem xét chrome để thử nghiệm. vì vậy tôi không thể chấp nhận câu trả lời này. nếu bạn có cách giải quyết ne cho firefox sau đó làm cho tôi biết. TIA !! –

+0

Tôi đã đưa giải pháp Firefox vào câu trả lời –

+1

Cảm ơn Lt_shade –

Các vấn đề liên quan