我正在使用Selenium Webdriver并正在使用IE11
。我想从HTML页面访问窗口性能资源。
从chrome我可以轻松地使用
IJavaScriptExecutor js = _webDriver as IJavaScriptExecutor;
ReadOnlyCollection<object> rList = ReadOnlyCollection<object>)js.ExecuteScript("return window.performance.getEntriesByType(\"resource\")");
然后一个简单的String对象字典转换让我得到详细信息。
但相同的代码不适用于IE。在那里,我被迫将js返回的内容转换为ReadOnlyCollection<IWebElement>
- 这显然不包含我想要的任何信息。
有谁知道我应该做些什么来获得真实信息回来?
答案 0 :(得分:0)
我找到了各种答案 基本上我可以查询这样的字符串来查找数组描述和访问单个项目。
"return window.performance.getEntriesByType(\"resource\").length"
"return window.performance.getEntriesByType(\"resource\")[0].name"
不是我预期的解决方案,但它有效
答案 1 :(得分:0)
var resourceJson = ieDriver.ExecuteScript("var resourceTimings = window.performance.getEntriesByType(\"resource\");return JSON.stringify(resourceTimings)");
var resourceTimings = JsonConvert.DeserializeObject<System.Collections.ObjectModel.ReadOnlyCollection<object>>(resourceJson.ToString());
我被困在同一条船上,这是我能做的最好的事情:
var resNames = ieDriver.ExecuteScript("var keys = [];for(var key in window.performance.getEntriesByType(\"resource\")){keys.push(key);} return keys;");
Dictionary<string, Dictionary<string, object>> resTimings = new Dictionary<string, Dictionary<string, object>>();
foreach (string name in (System.Collections.ObjectModel.ReadOnlyCollection<object>)resNames)
{
var resource = new Dictionary<string, object>();
var resProperties = ieDriver.ExecuteScript(string.Format("var keys = [];for(var key in window.performance.getEntriesByType(\"resource\")[{0}]){{keys.push(key);}} return keys;", name));
foreach (string property in (System.Collections.ObjectModel.ReadOnlyCollection<object>)resProperties)
{
resource.Add(property, ieDriver.ExecuteScript(string.Format("return window.performance.getEntriesByType(\"resource\")[{0}].{1};", name, property)));
}
resTimings.Add(name, resource);
}
这有效,但似乎需要太长时间。我确定要做很多优化。不太了解js,但似乎可以更快地卸载那里的工作。