首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PhantomCSS -未执行Javascript

PhantomCSS -未执行Javascript
EN

Stack Overflow用户
提问于 2015-03-03 02:36:59
回答 1查看 238关注 0票数 0

我正在尝试使用phantomCSS对HTML页面中的不同组件进行单元测试。我的测试HTML页面包含dropdown元素。在这个HTML中,我加载了一个javascript文件,该文件将这些元素转换为(通过使用jquery)。

因此,在我的testSuite中,我试图找到选择器"div.selected“并截取该元素的屏幕截图。这里问题是,PhantomCSS根本找不到选择器元素。

在更多的分析中,我们发现页面中包含的脚本没有被执行。请参阅下面的代码。请注意,我们正在使用gulp phantomcss运行测试,而不是通过命令行。

代码语言:javascript
复制
components.html
<html>
<body>
<select id="test" name="test">
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="CA" data-out-of-stock="true">California</option>
<option value="CO">Colorado</option>
<option value="CT">Connecticut</option>
<option value="DE">Delaware</option>
<option value="DC">District Of Columbia</option>
</select>
<script src="toolkit/scripts/toolkit.js"></script>
</body>
</html>

一旦加载了toolkit.js,上面的HTML就会像下面这样被转换。

代码语言:javascript
复制
<html>
<body>
<select id="test" name="test" data-initialized="" data-node-uid="1">
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="CA" data-out-of-stock="true">California</option>
<option value="CO">Colorado</option>
<option value="CT">Connecticut</option>
<option value="DE">Delaware</option>
<option value="DC">District Of Columbia</option>
</select>
<div class="select">
    <div class="selected">Alabama</div>
    <div class="options">
        <input id="test_0" type="radio" name="test" value="AL"><label for="test_0">Alabama</label>
        <input id="test_1" type="radio" name="test" value="AK"><label for="test_1">Alaska</label>
        <input id="test_2" type="radio" name="test" value="AZ"><label for="test_2">Arizona</label>
        <input id="test_3" type="radio" name="test" 
        value="AR"><label for="test_3">Arkansas</label><input id="test_4" type="radio" name="test" value="CA" disabled=""><label for="test_4" class="out-of-stock">California</label>
        <input id="test_5" type="radio" name="test" value="CO"><label for="test_5">Colorado</label><input id="test_6" type="radio" name="test" value="CT"><label for="test_6">Connecticut</label>
        <input id="test_7" type="radio" name="test" value="DE"><label for="test_7">Delaware</label><input id="test_8" type="radio" name="test" value="DC"><label for="test_8">District Of Columbia</label>
    </div>
</div>
</body>
</html>

下面是我的testSuite.js文件(现在,我只是想看看是否得到了我正在寻找的元素的屏幕截图)。

代码语言:javascript
复制
casper.start('http://localhost:3000/components.html');

casper.then(function(){
    phantomcss.screenshot("div.selected", 'dropdown/0.1 default-dropdown-standard');
});

casper.run();

当我运行testSuite时,我收到以下消息。

代码语言:javascript
复制
[PhantomCSS] Screenshot capture failed:  No element matching selector found: div.selected

我们有没有遗漏什么?请帮帮我们。

我对testSuite进行了一些修改,在错误消息上添加了监听器,得到了下面的错误。

代码语言:javascript
复制
[debug] [phantom] url changed to "http://localhost:3000/components.html"
Page Error: TypeError: 'undefined' is not an object (evaluating     '$(this.get(0).children).deepEach')

当页面加载时,我在toolkit.js中抛出了这个错误。但是当我在浏览器中打开这个HTML时,没有抛出同样的错误。不确定这是否是因为无头浏览器中的行为。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-03-06 05:14:35

我们能够解决这个问题。看起来components.html中包含的toolkit.js确实使用了bonzo而不是jquery来将HTML select转换为s。

由于某些原因,当我们运行测试套件时,$没有被识别。我们把$改成了"bonzo“,它解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28817011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档