java - 获取浏览器日志,如果浏览器控制台有任何严重日志,则使 TestNG 测试失败

标签 java selenium-webdriver ui-automation console.log

我正在使用 Selenium+TestNG+Java 设计一个自动化框架。 我想检查浏览器日志,如果执行任何测试时有任何 SEVERE 日志,则应将测试标记为 FAIL。

我能够确定获取浏览器日志的方式并将其添加到我的内部记录器中。

public void analyzeBrowserLogs() {
        String type = "browser";
        List<LogEntry> entries = driver.manage().logs().get(type).getAll();
        System.out.println(entries.size() + " " + type + " log entries found");
        for (LogEntry entry : entries) {
            //if(entry.getMessage().contains("SEVERE"))
                System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage());
        }
    }

我陷入困境,如何在执行测试用例时不断检查日志,如果日志中发生任何严重错误,我需要将相应的测试状态标记为“失败”。

如果我能够设计这个记录器功能,这将是对我的框架的一个很好的补充。

最佳答案

在浏览器基本上运行测试时持续轮询日志不仅是一种过度杀伤力,而且还可能导致不稳定的结果。

因此,在测试运行时,不建议同时从浏览器获取轮询日志。

你应该做的是:

  1. 当您的框架实例化 WebDriver 时,利用 EventFiringWebDriver(请参阅 javadocs here )作为您的 WebDriver 实现,而不是 RemoteWebDriver
  2. 插入 WebDriverEventListener 的自定义实现(请参阅 javadocs here ),其中您将识别导致 javascript 执行的事件(通常是在加载新页面时),并且对于这些事件,在在其 afterXXX 方法中,您调用 analyzeBrowserLogs(),如果出现严重错误,则会抛出异常,这会导致 TestNG 自动使您的测试失败

关于java - 获取浏览器日志,如果浏览器控制台有任何严重日志,则使 TestNG 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58082502/

相关文章:

java - 试图在 Jframe(形成汽车)上为线条/圆的 ArrayList 设置动画,但我似乎无法删除绘制的旧线条

java - 使用 selenium 自动登录 Web 应用程序

Cypress - 如何在 Cypress 中进行轮询?

python - Delphi:模拟按键以实现自动化

java - 如何读取控制台输出

java - 为什么使用 getInterfaces() 搜索时不出现 java.sql.PreparedStatement 接口(interface)

java - JPA 查询缺少别名和列(Hibernate)

python-3.x - Firefox Selenium (python) 不会打开 WebRTC 流

java - 如何在 java 中为 Selenium webdriver 编写我自己的自定义定位器?

android - Android 上的辅助功能测试自动化