Baz*_*nga 74 selenium selenium-rc
有没有办法捕获in DOM
中发生的错误,Selenium
并可能标记为与页面中的错误相同?
举一个简短的例子,假设我试图在一个不存在的HTML控件上绑定一个事件,我的浏览器会抛出一个错误说:
element abcd not found in the console.
现在,如果我希望同样的错误使我的selenium测试失败,并且浏览器上显示的消息显示为错误消息.
可以这样做吗?
mag*_*ell 50
我这样做是为了捕获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));
}
}
Run Code Online (Sandbox Code Playgroud)
jha*_*fen 49
将此脚本放在您的页面上,然后在Selenium中检查JSError:
<script type="text/javascript">
window.onerror=function(msg){
$("body").attr("JSError",msg);
}
</script>
Run Code Online (Sandbox Code Playgroud)
kle*_*tog 18
不知道什么时候改变了,但是现在这对我来说在Python中起作用了.该文件是一个带有javascript错误的简单页面.
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''}]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
JSErrorCollector完成了这项工作.
配置完成后,问题是:
List<JavaScriptError> jsErrorList = JavaScriptError.readErrors(driver);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51115 次 |
最近记录: |