private static string GetElementXPathJS()

in C#.Net/JDI ImageToWebElement/ImagePattnerSerach.cs [236:308]


        private static string GetElementXPathJS(IWebElement element)
        {
            string result = "";
            var jsResult = ((IJavaScriptExecutor)webDriver).ExecuteScript(@"
                return getElementXPath(arguments[0]);
                function getElementXPath(element)
                {

                    if (element && element.id)
                        return //*[@id='' + element.id + '\'];
                    else
                        return getElementTreeXPath(element);
                };

                function getElementTreeXPath(element)
                {
                    var paths = [];  // Use nodeName (instead of localName) 
                    // so namespace prefix is included (if any).
                    for (; element && element.nodeType == Node.ELEMENT_NODE; 
                        element = element.parentNode)
                    {
                        var index = 0;
                        var hasFollowingSiblings = false;
                        for (var sibling = element.previousSibling; sibling; 
                            sibling = sibling.previousSibling)
                        {
                            // Ignore document type declaration.
                            if (sibling.nodeType == Node.DOCUMENT_TYPE_NODE)
                                continue;

                            if (sibling.nodeName == element.nodeName)
                                ++index;
                        }

                        for (var sibling = element.nextSibling; 
                            sibling && !hasFollowingSiblings;
                                sibling = sibling.nextSibling)
                        {
                            if (sibling.nodeName == element.nodeName)
                                hasFollowingSiblings = true;
                        }

                        var tagName = (element.prefix ? element.prefix + ':' : '') 
                            + element.localName;
                        var pathIndex = (index || hasFollowingSiblings ? '['
                            + (index + 1) + ']' : '');
                        paths.splice(0, 0, tagName + pathIndex);
                }

            return paths.length ? '/' + paths.join('/') : null;
            };"
            , element);
            if (jsResult == null)
            {
                var jsResult2 = ((IJavaScriptExecutor)webDriver).ExecuteScript(@"
                    var xpath = '';
                    var element = arguments[0];
                    for ( ; element && element.nodeType == 1; element = element.parentNode )
                    {
                        var id = $(element.parentNode).children(element.tagName).index(element) + 1;
                        id > 1 ? (id = '[' + id + ']') : (id = '');
                        xpath = '/' + element.tagName.toLowerCase() + id + xpath;
                    }
                    return xpath;", element);

                if (jsResult2 != null)
                    result = jsResult2.ToString();
            }
            else
                result = jsResult.ToString();

            return result;
        }