[selenium] Selenium에서 JavaScript 오류 캡처

에서 발생하는 오류를 캡처 할 수있는 방법이 있습니까 DOM에서 Selenium아마 페이지에 오류와 같은 플래그는?

간단한 예를 들어, 존재하지 않는 HTML 컨트롤에서 이벤트를 바인딩하려고한다고 가정 해 보겠습니다. 브라우저에서 다음과 같은 오류가 발생합니다.

element abcd not found in the console.

이제 동일한 오류가 셀레늄 테스트에 실패하고 브라우저에 표시되는 메시지가 오류 메시지로 표시되도록하려면.

이런 식으로 할 수 있습니까?



답변

이 스크립트를 페이지에 넣은 다음 Selenium에서 JSError를 확인하십시오.

<script type="text/javascript">
    window.onerror=function(msg){
        $("body").attr("JSError",msg);
    }
</script>


답변

JavaScript 오류를 캡처하기 위해이 작업을 수행하고 있습니다.

[TestCleanup]
public void TestCleanup()
{
    var errorStrings = new List<string>
    {
        "SyntaxError",
        "EvalError",
        "ReferenceError",
        "RangeError",
        "TypeError",
        "URIError"
    };

    var jsErrors = Driver.Manage().Logs.GetLog(LogType.Browser).Where(x => errorStrings.Any(e => x.Message.Contains(e)));

    if (jsErrors.Any())
    {
        Assert.Fail("JavaScript error(s):" + Environment.NewLine + jsErrors.Aggregate("", (s, entry) => s + entry.Message + Environment.NewLine));
    }
}


답변

이것이 언제 바뀌 었는지 확실하지 않지만 지금은 Python에서 작동합니다. 이 파일은 자바 스크립트 오류가있는 간단한 페이지입니다.

In [11]: driver.get("file:///tmp/a.html")

In [12]: driver.get_log("browser")
Out[12]:
[{u'level': u'SEVERE',
  u'message': u'ReferenceError: foo is not defined',
  u'timestamp': 1450769357488,
  u'type': u''},
 {u'level': u'INFO',
  u'message': u'The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.',
  u'timestamp': 1450769357498,
  u'type': u''}]

Python-Selenium 버전 2.48.0 Linux Firefox 43.0


답변

내가 사용하는 python webdriver 솔루션은 다음과 같습니다.

def check_browser_errors(driver):
    """
    Checks browser for errors, returns a list of errors
    :param driver:
    :return:
    """
    try:
        browserlogs = driver.get_log('browser')
    except (ValueError, WebDriverException) as e:
        # Some browsers does not support getting logs
        LOGGER.debug("Could not get browser logs for driver %s due to exception: %s",
                     driver, e)
        return []

    errors = []
    for entry in browserlogs:
        if entry['level'] == 'SEVERE':
            errors.append(entry)
    return errors


답변

JSErrorCollector 가 작업을 수행합니다.

일단 구성되면 다음과 같은 문제가 있습니다.

List<JavaScriptError> jsErrorList = JavaScriptError.readErrors(driver);


답변

window.onerror기반 솔루션 (내가 시도하지 않았 음) : http://sejq.blogspot.com/2008/12/can-selenium-detect-if-page-has.html


답변

jhanifen의 답변을 반복하고 싶습니다. 다음은 jQuery에 의존하지 않는 자바 스크립트 솔루션입니다. 페이지 하단에 보이지 않는 HTML 목록을 만들어 오류를 계속합니다.

(function () {
    var ul = null;
    function createErrorList() {
        ul = document.createElement('ul');
        ul.setAttribute('id', 'js_error_list');
        ul.style.display = 'none';
        document.body.appendChild(ul);
    }
    window.onerror = function(msg){
        if (ul === null)
            createErrorList();
        var li = document.createElement("li");
        li.appendChild(document.createTextNode(msg));
        ul.appendChild(li);
    };
})();