셀레늄: 효과적인 배경색 결정
이 예제 html을 보자
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body style="background-color: black;">
<div id="myDiv" style="color: white;">DEV.TO</div>
</body>
</html>
내 목표는
#myDiv
의 배경색을 얻는 것이 었습니다.내가 시도한 확실한 해결책은 해당 요소에서 CSS 속성 배경색을 가져오는 것이었습니다.
WebElement element = driver.findElement(By.cssSelector("#myDiv"));
element.getCssValue("background-color");
이것은 예상되는 검정색 대신에 나
rgba(0, 0, 0, 0)
를 얻습니다.나는 약간의 구글링을 했고 JavaScript를 통해 유효 속성을 계산해야 하는 솔루션을 찾았습니다. 이렇게 생겼습니다.
WebElement elemement = driver.findElement(By.cssSelector("#myDiv"));
String computedStylePropertyScript = "return window.document.defaultView"
+ ".getComputedStyle(arguments[0],null).getPropertyValue(arguments[1]);";
((JavascriptExecutor) driver).executeScript(computedStylePropertyScript, elem, "background-color");
여전히
rgba(0, 0, 0, 0)
을 얻습니다.왜 그런 겁니까?
나는 더 많은 것을 봤고 최신 브라우저는
rgba(0, 0, 0, 0)
를 투명한 색상으로 취급하고 효과적인 것으로 표시한다는 것을 알았습니다.나에게 좋지 않다.
따라서 내 솔루션은 부모 div를 찾고 해당 색상을 확인하는 것이어야 합니다. 여전히 투명하다면 더 깊이 들어가십시오. 이것을 무한 루프로 만들지 않으려면 body 태그에서 끝내도록 하겠습니다. 그 때까지 색상을 찾지 못하면 지정된 색상이 없을 것입니다.
내 코드는 다음과 같습니다.
private String getBGColor(WebElement elementToSearch) {
WebElement current = elementToSearch;
while(isTransparent(current.getCssValue("background-color"))) {
if (current.getTagName().equals("body")) {
return null;
}
// Find Parent
current = current.findElement(By.xpath("./.."));
}
return current.getCssValue("background-color");
}
private boolean isTransparent(String color) {
String colorMod = color.replaceAll("\\s+","").toLowerCase();
return Arrays.asList("transparent","","rgba(0,0,0,0)").contains(colorMod);
}
이렇게 부를 수 있습니다.
WebElement element = driver.findElement(By.cssSelector("#myDiv"));
getBGColor(element);
그리고 그것은 당신에게 올바른 검은 색을 제공합니다.
하지만. 항상 일부 하지만 있습니다. 순진한 구현입니다. 절대 위치에 있는 요소가 있는 경우(귀하의 요소가 상위 div에 렌더링되지 않음) 이 문제가 해결됩니다.
이것이 흥미로우면 나를 팔로우할 수 있습니다.
Reference
이 문제에 관하여(셀레늄: 효과적인 배경색 결정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pavel_polivka/determining-the-effective-background-color-17ld텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)