【问题标题】:Capybara poltergeist phantomjs JavascriptError on AudioCapybara poltergeist phantomjs JavascriptError on Audio
【发布时间】:2012-11-17 19:39:57
【问题描述】:

我遇到了一个异常:

Capybara::Poltergeist::JavascriptError

还有一个调试输出:

"args"=>[[{"message"=>"ReferenceError: 找不到变量:音频"

Here's what I found when researching the error:

这个问题是由于 sencha 2.0 使用 phantomjs 来解决的 依赖关系。 Phantomjs 不支持 HTML5 音频 API。

问题是:如何在使用 capybara/poltergeist 时忽略 javascript Audio 类型的 javascript 错误?

我试过了

visit "/"
page.execute_script "var Audio= function(){ return { load: function(){}, play: function(){} } }"

但是visit方法报错。

【问题讨论】:

    标签: capybara phantomjs poltergeist


    【解决方案1】:

    Phantomjs 不支持 git 文档 here 中指定的 Audio

    我遇到了同样的问题,也尝试使用您描述的代码遵循您的方法,但不使用var,因此它将被全局定义。

    page.execute_script "Audio= function(){ return { load: function(){}, play: function(){} } }"
    

    我用检查器 page.driver.debug 对其进行了测试,它在 phantomjs 中正确定义了 Audio,然后的问题是,它在需要之前没有被执行。

    因此,我的方法是添加一个检查以验证 Audio 在我的实际代码中实际与函数一起使用之前是否已定义。这是我拥有的功能的一个示例:

    getAudioObject = function(file_path){
      if (typeof Audio !== "undefined" && Audio !== null) {
        audioObj = new Audio(file_path);
        audioObj.loop = true;
        return audioObj;
      }
    }
    

    这是我的解决方案,它对我有用。我希望这对你也有帮助。

    【讨论】:

    • 我记得做过类似的事情。如果浏览器没有定义它,我没有将我的音频代码放入 if 中,而是在我的代码中全局定义了一个空音频。但你的答案是完全合法的。谢谢
    • 谢谢。这帮了大忙。
    【解决方案2】:

    要在初始化任何资源脚本之前正确定义全局变量,请使用“onInitialized”处理程序。

    【讨论】:

    • 是的,这适用于普通的 PhantomJS 脚本,但我认为这不适用于水豚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    相关资源
    最近更新 更多