에서 발생하는 오류를 캡처 할 수있는 방법이 있습니까 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);
};
})();