无法返回Javascript对象Selenium C#

时间:2016-06-30 16:17:38

标签: javascript c# selenium selenium-webdriver

所以基本上我要做的就是设置一个代理来拦截我对网站的调用,并在标题中放置一个脚本标记,以便使用fiddler的代理库来捕获javascript错误。看起来像这样:

<script>
    window.__webdriver_javascript_errors = []; 
    window.onerror = function(errorMsg, url, line) 
                    { window.__webdriver_javascript_errors.push(errorMsg + ' (found at ' + url + ', line ' + line + ')'); };
</script>

这一切都很有效,并且在页面加载之前捕获错误。我的问题是,当我转到页面时,我实际上无法从页面返回javascript对象。

        public static IList<string> GetJavaScriptErrors(IWebDriver driver, TimeSpan timeout)
        {
            string errorRetrievalScript = "var errorList = window.__webdriver_javascript_errors; window.__webdriver_javascript_errors = []; return errorList;";
            DateTime endTime = DateTime.Now.Add(timeout);
            List<string> errorList = new List<string>();
            IJavaScriptExecutor executor = driver as IJavaScriptExecutor;
            List<object> returnedList = executor.ExecuteScript(errorRetrievalScript) as List<object>;
            while (returnedList == null && DateTime.Now < endTime)
            {
                System.Threading.Thread.Sleep(250);
                returnedList = executor.ExecuteScript(errorRetrievalScript) as List<object>;
            }

            if (returnedList == null)
            {
                return null;
            }
            else
            {
                foreach (object returnedError in returnedList)
                {
                    errorList.Add(returnedError.ToString());
                }
            }

            return errorList;
        }

现在当我运行它时,我的 returnedList 永远不会返回 errorRetrievalScript 。我似乎无法弄清楚为什么我总是返回null。

奇怪的是,在我运行javascript的执行程序之前,如果我去Firefox并输入

  

窗口.__ webdriver_javascript_errors

所有的错误都显示得很好,但是第二次我点击那个执行者,错误就消失了,这就是我想要发生的事情,这是有效的!但回报永远不会回报。

我做错了什么?

修改

我正在使用的selenium和浏览器版本是:

Firefox:47.0.1

Chrome:51.0.2704.103

IE:11.420.10586.0

硒:2.53.1

0 个答案:

没有答案