所以基本上我要做的就是设置一个代理来拦截我对网站的调用,并在标题中放置一个脚本标记,以便使用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