public IEnumerable <INativeElement> GetElementsWithQuerySelector(ICssSelector selector, DomContainer domContainer)
        {
            var container = "document";

            if (_element != null)
            {
                var elementTag = new ElementTag(_element.TagName);
                if (elementTag.Equals(new ElementTag("frame")) || elementTag.Equals(new ElementTag("iframe")))
                {
                    var frameHierarchy = _element.GetAttributeValue("data-watinFrameHierarchy");
                    container = frameHierarchy + ".document";
                }
                else
                {
                    var document = _element.AsHtmlElement.document;
                    var result   = new Expando(document).GetValue <string>("___WATINFRAMEHIERARCHY");

                    container = "";
                    if (result != null)
                    {
                        container = result;
                    }

                    if (!string.IsNullOrEmpty(container))
                    {
                        container += ".";
                    }

                    container += _element.GetJavaScriptElementReference();
                }
            }
            else
            {
                //container = CreateArray();
            }

            domContainer.RunScript(new ScriptLoader().GetSizzleInstallScript());

            var code = string.Format("document.___WATINRESULT = Sizzle('{0}', {1});", selector.Selector(true), container);

            domContainer.RunScript(code);

            return(new JScriptElementArrayEnumerator((IEDocument)domContainer.NativeDocument, "___WATINRESULT"));
        }
Exemple #2
0
        public static IEnumerable <WatiN.Core.Element> XPath(this IElementContainer elementContainer, string xpath)
        {
            DomContainer domContainer = null;

            // TODO: Test that contextNode works
            var container = "document";

            var document = elementContainer as Document;

            if (document != null)
            {
                domContainer = document.DomContainer;
            }

            var element = elementContainer as WatiN.Core.Element;

            if (element != null)
            {
                container    = element.NativeElement.GetJavaScriptElementReference();
                domContainer = element.DomContainer;
            }

            if (domContainer == null)
            {
                return(Enumerable.Empty <WatiN.Core.Element>());
            }

            if (domContainer.Eval("window.jsxpath") == "undefined")
            {
                var script = "window.jsxpath = { targetFrame: undefined, exportInstaller: false, useNative: true, useInnerText: true };" +
                             Resources.javascript_xpath;
                domContainer.RunScript(script);
            }

            // TODO: This escaping will fail if the string is already escaped
            var code = string.Format("document.___WATINRESULT = document.evaluate('{0}', {1}, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);", xpath.Replace("'", @"\'"), container);

            domContainer.RunScript(code);

            return(from nativeElement in new JScriptXPathResultEnumerator((IEDocument)domContainer.NativeDocument, "___WATINRESULT")
                   select ElementFactory.CreateElement(domContainer, nativeElement));
        }
        public IEnumerable <INativeElement> GetElementsWithQuerySelector(string selector, DomContainer domContainer)
        {
            domContainer.RunScript(new ScriptLoader().GetSizzleInstallScript());
            var container = "document";

            if (_element != null)
            {
                container = _element.GetJavaScriptElementReference();
                if (new ElementTag(_element.TagName).Equals(new ElementTag("frame")))
                {
                    container = container + ".contentDocument";
                }
            }

            var code = string.Format("document.___WATINRESULT = Sizzle('{0}', {1});", selector, container);

            domContainer.RunScript(code);

            return(new JScriptElementArrayEnumerator((IEDocument)domContainer.NativeDocument, "___WATINRESULT"));
        }
        public IEnumerable<INativeElement> GetElementsWithQuerySelector(string selector, DomContainer domContainer)
        {
            domContainer.RunScript(new ScriptLoader().GetSizzleInstallScript());

            var command = string.Format("window.Sizzle('{0}', {1})", selector, containerReference);

            var ffElements = GetElementArrayEnumerator(command);
            foreach (var ffElement in ffElements)
            {
                yield return ffElement;
            }
        }
        public IEnumerable <INativeElement> GetElementsWithQuerySelector(ICssSelector selector, DomContainer domContainer)
        {
            domContainer.RunScript(new ScriptLoader().GetSizzleInstallScript());

            var command = string.Format("window.Sizzle('{0}', {1})", selector.Selector(true), containerReference);

            var ffElements = GetElementArrayEnumerator(command);

            foreach (var ffElement in ffElements)
            {
                yield return(ffElement);
            }
        }
        public IEnumerable<INativeElement> GetElementsWithQuerySelector(string selector, DomContainer domContainer)
        {
            var container = "document";
            if (_element != null)
                container = _element.GetJavaScriptElementReference();

            var code = string.Format("document.___WATINRESULT = Sizzle('{0}', {1});", selector, container);
            domContainer.RunScript(code);

            return new JScriptElementArrayEnumerator((IEDocument) domContainer.NativeDocument, "___WATINRESULT");
        }
        public IEnumerable<INativeElement> GetElementsWithQuerySelector(string selector, DomContainer domContainer)
        {
            domContainer.RunScript(new ScriptLoader().GetSizzleInstallScript());
            var container = "document";
            if (_element != null)
            {
                container = _element.GetJavaScriptElementReference();
                if (new ElementTag(_element.TagName).Equals(new ElementTag("frame")))
                    container = container + ".contentDocument";
            }

            var code = string.Format("document.___WATINRESULT = Sizzle('{0}', {1});", selector, container);
            domContainer.RunScript(code);

            return new JScriptElementArrayEnumerator((IEDocument) domContainer.NativeDocument, "___WATINRESULT");
        }
        public IEnumerable<INativeElement> GetElementsWithQuerySelector(ICssSelector selector, DomContainer domContainer)
        {
            var container = "document";
            if (_element != null)
            {
                var elementTag = new ElementTag(_element.TagName);
                if (elementTag.Equals(new ElementTag("frame")) || elementTag.Equals(new ElementTag("iframe")))
                {
                    var frameHierarchy = _element.GetAttributeValue("data-watinFrameHierarchy");
                    container = frameHierarchy + ".document";
                }
                else
                {
                    var document = _element.AsHtmlElement.document;
                    var result = new Expando(document).GetValue<string>("___WATINFRAMEHIERARCHY");

                    container = "";
                    if (result != null)
                        container = result;

                    if (!string.IsNullOrEmpty(container))
                        container += ".";

                    container += _element.GetJavaScriptElementReference();
                }
            }
            else
            {
                //container = CreateArray();
            }

            domContainer.RunScript(new ScriptLoader().GetSizzleInstallScript());

            var code = string.Format("document.___WATINRESULT = Sizzle('{0}', {1});", selector.Selector(true), container);
            domContainer.RunScript(code);

            return new JScriptElementArrayEnumerator((IEDocument) domContainer.NativeDocument, "___WATINRESULT");
        }