捕获Selenium中的JavaScript错误

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)

  • 真的很喜欢这个解决方案 (3认同)
  • 使用最新版本的Selenium驱动程序3.6.0和Firefox 56.0,“ GetLog”方法将引发“对象引用未设置为对象的实例”,不确定为什么...在旧版本的WebDriver /中有效火狐浏览器 (2认同)
  • @DavidRogers我认为这不再适用于geckodriver,因为:https://github.com/mozilla/geckodriver/issues/284 (2认同)

jha*_*fen 49

将此脚本放在您的页面上,然后在Selenium中检查JSError:

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

  • 或者你可以说`document.body.setAttribute("JSError",msg)`而不是依赖于jQuery (50认同)
  • 这可以很容易地扩展到也可以捕获JQuery没有加载的情况:在错误调用之外添加$('body').attr("JQLoaded","Yes").然后在Selenium存在JSError,或者缺少JQLoaded,发出Javascript错误信号. (3认同)
  • 是否必须永久地添加到HTML页面,或者在运行测试时动态添加?我不确定我是否会说服开发人员在每个页面上添加该代码段.感谢您与我分享详细信息. (3认同)
  • 链接的页面不再可用. (3认同)

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


d3m*_*ing 7

这是我使用的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)


Leo*_*eor 6

JSErrorCollector完成了这项工作.

配置完成后,问题是:

List<JavaScriptError> jsErrorList = JavaScriptError.readErrors(driver);
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考:该项目目前仅支持Firefox (2认同)