单击某个元素时,xpath发生了变化

时间:2019-01-07 10:53:36

标签: javascript dom

我正在使用自动化测试工具。为了找到元素xpath,我编写了几乎对所有元素都适用的代码。但是相同的代码不适用于少数元素,并且发现元素的父节点为null。我已经使用了chrome的xpath助手,并发现了span元素的xpath如下。

  

/ html [@ class ='ng-scope'] / body / div [@ id ='ui-datepicker-div'] / div [@ class ='ui-datepicker-header ui-widget-header ui- helper-clearfix ui-corner-all'] / a [@ class ='ui-datepicker-prev ui-corner-all ui-state-hover ui-datepicker-prev-hover'] / span [@ class ='ui-图标ui-icon-circle-triangle-w']

点击相同的元素后,返回不完整的xpath,如下所示

  

/ div [@ class ='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all'] / a [@ class ='ui-datepicker-prev ui-corner-all ui状态悬浮ui-datepicker-prev-hover'] / span [@ class ='ui-icon ui-icon-circle-triangle-w xh-highlight']

即使从chrome的xpath帮助程序也不会返回完整路径。如何解决此问题,或者我缺少什么?

我使用过的

xpath帮助器仅用于显示单击元素后路径的变化。实际上,我正在使用Internet上的以下代码来单击元素后获取xpath。

function(element) {
            var ix = 0;
            var siblings = element.parentNode.childNodes; // getting error parent node is null
            for (var i = 0; i < siblings.length; i++) {
                var sibling = siblings[i];
                if (sibling === element) {
                    return  getPathTo(element.parentNode) + '/' + element.tagName + '[' + (ix + 1) + ']';
                }
                if (sibling.nodeType === 1 && sibling.tagName === element.tagName)
                    ix++;
            }
        }

当我遇到错误时,该函数未返回完整的xpath。上面的代码是

1 个答案:

答案 0 :(得分:0)

如果您查看提供的XPATH详细信息

点击前

/html[@class='ng-scope']
    /body
        /div[@id='ui-datepicker-div']
            /div[@class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all']
                /a[@class='ui-datepicker-prev ui-corner-all ui-state-hover ui-datepicker-prev-hover']
                    /span[@class='ui-icon ui-icon-circle-triangle-w']

点击后

/div[@class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all']
                /a[@class='ui-datepicker-prev ui-corner-all ui-state-hover ui-datepicker-prev-hover']
                    /span[@class='ui-icon ui-icon-circle-triangle-w xh-highlight']

点击该元素后,只会在跨度中添加“ xh-highlight”,即该元素会突出显示。

在这里,您可以自定义此XPATH,例如,它应该可以完美运行。

/div[@class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all']
                    /a[@class='ui-datepicker-prev ui-corner-all ui-state-hover ui-datepicker-prev-hover']
                        /span[contains(@class,'ui-icon ui-icon-circle-triangle-w')]

即在Span中使用“ contains()”方法代替“ =”。

但是我建议不要使用XPath帮助程序来创建自己的XPath定位器