css - 如何使用 chrome dev 协议(protocol)获取 CSS Coverage 数据?

标签 css google-chrome google-chrome-devtools code-coverage

我正在努力创建一个简单的 java 类,它会在任何给定页面上为我提供已使用和未使用的 css。

public class coverage {

    static String str;

    public static void main(String[] args) throws JSONException {

        String url = "https://www.amazon.com";
        Launcher launcher = new Launcher();
        try (SessionFactory factory = launcher.launch();
                Session session = factory.create()) {
            Command command = session.getCommand();
            DOM dom = command.getDOM();
            CSS css = command.getCSS();
            session.navigate(url);
            dom.enable();
            css.enable();
            HashMap<String, List<String>> hm = new HashMap<String, List<String>>();
            HashMap<String, String> hmUsedCSS = new HashMap<String, String>();
            css.startRuleUsageTracking();
            List<RuleUsage> list = css.stopRuleUsageTracking();
            for (RuleUsage coverage : list) {
                if (!hm.containsKey(coverage.getStyleSheetId())) {
                    hm.put(coverage.getStyleSheetId(),                               
                  css.collectClassNames(coverage.getStyleSheetId()));
                }
                if (!coverage.isUsed()) {
                    String existingContent = hmUsedCSS.get(coverage
                            .getStyleSheetId());
                    String extraContent = css.getStyleSheetText(coverage
                            .getStyleSheetId());
                    hmUsedCSS.put(coverage.getStyleSheetId(),
                            existingContent == null ? extraContent
                                    : existingContent + extraContent);
                }
            }

            for (String name : hm.keySet()) {
                List<String> value = hm.get(name);
                System.out.println("Total " + name + "=>" + value);

            }

            for (String name : hmUsedCSS.keySet()) {
                List<String> value = hm.get(name);
                System.out.println("Used CSS " + name + "=>" + value);

            }
        }
    }

}

根据官方documentation , 'stopRuleUsageTracking' 会通过在 RuleUsage 中设置 'used' bool 值来告诉我们是否正在使用特定的 CSS ,但它返回页面上所有可用的 CSS,并将“已用”设置为 true。我发现答案在于 startoffset 和 endoffset 值,因为它们告诉我们已用 CSS 的定位。但我不知道如何将这些值转换为 Used & Unused CSS 的有意义的结果?有人可以帮我吗?

最佳答案

正如我在问题中指出的那样,关键是根据开始和结束偏移值获取覆盖率数据。我能够编写逻辑来执行相同的操作并获得所需的已用和未用 CSS 列表。

关于css - 如何使用 chrome dev 协议(protocol)获取 CSS Coverage 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47036035/

相关文章:

firefox - Chrome 和 Firefox 之间的 CSS3 背景渐变问题

html - HTML 中的多个类在 Chrome 中有效,但在 Edge 和 Firefox 中无效

jquery - 用 Chrome 判断哪个 JS 函数应用了某种样式

javascript - Chrome 开发工具脚本注入(inject)可以在页面重新加载后继续存在

css - 为什么用 Foundation (Zurb) 制作的页面的中心(10 列)部分和右侧(1 列)部分之间有很大的空间?

javascript - 单击 div 以使用 jquery 将填充添加到另一个 div

javascript - 检查 p :fileUpload component contains any file to upload, 是否改变背景

css - Chrome 扩展 CSS 操作

javascript - 用于命名 eval'ed javascript 的 token

html - 悬停时我无法让按钮以图像为中心