셀레늄: 효과적인 배경색 결정

최근에 몇 가지 Selenium 테스트 버그 수정을 수행했습니다(기본적으로 QA 엔지니어가 놓친 문제를 해결하려고 시도함). 문제 중 하나는 div의 효과적인 배경색을 결정하는 것이었습니다.

이 예제 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에 렌더링되지 않음) 이 문제가 해결됩니다.


이것이 흥미로우면 나를 팔로우할 수 있습니다.

좋은 웹페이지 즐겨찾기