0

我正在使用 Selenium Webdriver 并且正在使用IE11.
我想从 HTML 页面访问窗口性能资源。
从chrome我可以很容易地做到这一点

IJavaScriptExecutor js = _webDriver as IJavaScriptExecutor;
ReadOnlyCollection<object> rList =  ReadOnlyCollection<object>)js.ExecuteScript("return window.performance.getEntriesByType(\"resource\")");

然后一个简单的字符串对象字典转换让我得到细节。

但是相同的代码不适用于 IE。在那里,我被迫将 js 返回的内容转换为 a ReadOnlyCollection<IWebElement>- 这显然不包含我想要的任何信息。
有谁知道我应该怎么做才能取回真实信息?

4

2 回答 2

0

好吧,我找到了各种各样的答案基本上我可以使用这样的字符串进行查询以查找数组描述并访问单个项目。

"return window.performance.getEntriesByType(\"resource\").length"
"return window.performance.getEntriesByType(\"resource\")[0].name"

不是我期望的解决方案,但它有效

于 2016-07-08T15:17:11.063 回答
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,但似乎在那里卸载工作可能会更快。

于 2016-07-13T15:23:15.910 回答