xpath изменен при нажатии на элемент - PullRequest
0 голосов
/ 07 января 2019

Я работаю над инструментом тестирования автоматизации. Для нахождения элемента xpath я написал код, который отлично работает практически для всех элементов. Но тот же код не работает для нескольких элементов и обнаружил, что родительский узел элемента является нулевым. Я взял xpath-помощник chrome и нашел xpath элемента span, как показано ниже.

/ 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 ']

после нажатия на тот же элемент был возвращен неполный 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 [@ class =' ​​ui-icon ui-icon-circle-triangle-w xh-highlight ']

даже из помощника xpath chrome не возвращает полный путь. Как решить эту проблему или мне чего-то не хватает?

Помощник xpath, который я использовал, только показывает изменение пути после нажатия на элемент. На самом деле я использую приведенный ниже код из Интернета, чтобы получить 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 голосов
/ 07 января 2019

Если вы посмотрите на предоставленные вами данные 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')]

т.е. вместо '=' используйте метод 'includes ()' в Span.

Но я бы рекомендовал вместо использования помощника XPath создавать свои собственные локаторы XPath

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...