首页 > 解决方案 > 使用 nightwatchjs 定位并检查脚本(在网页内)是否正确

问题描述

我使用 nightwatchjs 作为我的测试工具,我需要测试注入的脚本是否正确显示在页面上,并且脚本是否正确填充。

因此,要测试以下脚本 html(以确保正确显示):

<script type="text/javascript">
    (function() {
        window.dm = window.dm ||{ AjaxData:[]};
        window.dm.AjaxEvent = function(et, d, ssid, ad) {
            dm.AjaxData.push({ et:et, d:d, ssid:ssid, ad:ad});
            window.DotMetricsObj && DotMetricsObj.onAjaxDataUpdate();
        };
        var d = document, h = d.getElementsByTagName('head')[0], s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src='https://uk-script.dotmetrics.net/door.js?id=11373';
        h.appendChild(s);
    } ());
</script>

因此,首先,我想测试该脚本是否存在于页面上,但以一种尽可能不那么脆弱的方式。我可以测试/html/head/script[13]/text()但这真的很脆弱而且远非理想。

脚本本身有什么我可以参考的东西,所以测试不会那么脆弱吗?

其次,我要确保脚本细节是正确的。例如,这可以是一个检查脚本的https://uk-script.dotmetrics.net部分是否存在的测试。

但是,我尝试使用我通常的 css 和 xpath 方法来定位脚本的这一部分,但没有运气。

任何帮助,将不胜感激。谢谢。

标签: javascriptnightwatch.js

解决方案


根据“断言什么,而不是如何”的范式,这里的“什么”似乎是确保脚本被注入到页面中。您可以使用像这样的选择器:script[src^="https://uk-script.dotmetrics.net/"],与 Nightwatch 的element功能结合使用。您可以添加更多选择器来断言脚本具有预期的属性,例如typeasync

通过这种方式,您可以跳过实现细节(注入脚本的存在)并专注于我认为您真正关心的事情(将具有正确 URL 的脚本注入页面)。


推荐阅读