Selenium的PhantomJS webdriver没有在reactjs中加载页面

时间:2015-07-07 14:20:27

标签: javascript python-2.7 selenium reactjs phantomjs

我试图测试网站的新功能。这是迄今为止在React中构建的唯一页面。当我尝试使用PhantomJS在Selenium中运行测试时,页面索引会加载,但整页加载永远不会触发。

页面正文为:

<body>
    <main id="content"></main>
    <script type="text/javascript">
        function loadBundleJS( jsSource){
            var bundleJSScriptTag=document.createElement('script')
            bundleJSScriptTag.setAttribute("type","text/javascript")
            bundleJSScriptTag.setAttribute("src", jsSource)
            if (typeof bundleJSScriptTag != 'undefined'){
                document.getElementsByTagName('head')[0].appendChild(bundleJSScriptTag);
            }
        }
        var paramsArray = window.location.search.substring(1).split("&");
        Object.keys(paramsArray).forEach(function(key){
            var param = paramsArray[key];
            if (param.indexOf("/")>-1){
                param = param.substring(0, param.indexOf("/"))
            }
        })
        loadBundleJS('js/bundle.0.0.2.js')
    </script>
</body>

当网站在浏览器中运行时,内容将附加到主标记。但是,在PhantomJS中,此内容永远不会被追加,PhantomJS会加载一个空白页面。

1 个答案:

答案 0 :(得分:1)

问题不在您的代码中,在PhantomJS运行的WebKit浏览器中。 PhantomJS运行旧版本的WebKit引擎,该引擎使用较旧版本的ECMAScript。
ReactJS使用ECMAScript 5中的 Function.bind 方法 解决方案非常简单,如果不存在,则需要在代码中定义Function.prototype.bind。

**确保之前加载代码包括react.js。

if (!Function.prototype.bind) {
Function.prototype.bind = function(oThis) {
    if (typeof this !== 'function') {
        throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
    }

    var aArgs   = Array.prototype.slice.call(arguments, 1),
        fToBind = this,
        fNOP    = function() {},
        fBound  = function() {
            return fToBind.apply(this instanceof fNOP
                    ? this
                    : oThis,
                aArgs.concat(Array.prototype.slice.call(arguments)));
        };

    if (this.prototype) {
        fNOP.prototype = this.prototype;
    }
    fBound.prototype = new fNOP();

    return fBound;
};

}

代码取自:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind#Polyfill