В чем разница между.// и //* в XPath?
при поиске относительного XPath через Firebug : он создает как
.//*[@id='Passwd']
--------- Что делать, если мы не используем dot в начале, что это означает?просто добавить
//*
в Xpath -- он подчеркивает - - - различные элементы страницы---------- что это значит?
Ниже приведены XPaths для полей паролей Gmail. Что такое значение *
?
.//*[@id='Passwd']
//child::input[@type='password']
4 ответов
все эти выражения выбирают разные наборы узлов:
.// * [@id= 'Passwd']
The '. в начале означает, что текущая обработка начинается с текущего узла. "*"Выбирает все узлы элементов, нисходящие от этого текущего узла с @id
- attribute-значение, равное "Passwd".
что делать, если мы не используем точку в начале, что это означает?
затем вы выберете все узлы элементов с @id
- attribute-значение, равное "Passwd" в весь документ.
просто добавьте / / * в XPath - он выделяет - - - различные элементы страницы
это позволит выбрать все узлы элементов весь документ.
ниже упомянуто : XPatht для поля пароля Gmail истинны, что такое значение * ?
.//*[@id='Passwd']
это позволит выбрать все узлы элемента спуск от текущего узла, который @id
- attribute-value равно 'Passwd'.
/ / child:: input[@type= 'password']
это будет выбрать все дочерние узлы элемента с именем input
, который @type
-attribute-значения равны "пароль". The child::
префикс оси может быть опущен, поскольку это поведение по умолчанию.
синтаксис выбора соответствующего выражения объясняется здесь w3school.com.
и объясняются оси (текущая точка в обработке)здесь на другом w3school.com страница.
здесь есть несколько различных ключевых концепций XPath...
абсолютный vs относительный XPaths (/
vs .
)
-
/
вводит абсолютный путь, начиная с корневого документа. -
.
вводит относительный путь, начиная с контекстного узла.
именованный элемент против любого элемента (ename
vs *
)
-
/ename
выбираетename
корневой элемент-
./ename
выбирает всеename
дочерние элементы текущего узла.
-
-
/*
выбирает корневой элемент, независимо от имени.-
./*
или*
выбирает все дочерние элементы контекстного узла, независимо от имени.
-
ось потомок-или-собственной личности (//*
)
-
//ename
выбирает всеename
элементы в документе.-
.//ename
выбирает всеename
элементы В или под узлом контекста.
-
-
//*
выбирает все элементы в документе, независимо от имени.-
.//*
выбирает все элементы, независимо от имени, в узле контекста или под ним.
-
С этими концепции в виду, вот ответы на ваши конкретные вопросы...
-
.//*[@id='Passwd']
значит, чтобы выбрать все элементы На или под текущий контекстный узел, который имеетid
значение атрибута, равное'Passwd'
. -
//child::input[@type='password']
можно упростить до//input[@type='password']
и означает выбрать всеinput
элементы в документе, который имеетtype
значение атрибута, равное'password'
.
точка в XPath называется "контекстное выражение". Если вы поставите точку в начале выражения, это сделает его контекстно-специфичным. Другими словами, он будет искать элемент с id="Passwd"
в контексте узла, на котором вы вызываете метод" найти элемент по XPath".
на *
на .//*[@id='Passwd']
помогает матча любой элемент С id='Passwd'
.
- первый вопрос - все о контексте. Вы можете видеть синтаксис чтобы знать, что '.', '.. и т. д. Значит. Кроме того, я уверен, что вы не найдете лучшего объяснения, чем Этой Ссылке.
- упрощенный ответ на второй вопрос: вы обычно находите узлы, используя HTML-теги, такие как td, a, li, div и т. д. Но ' * ' означает, найти любой тег, который соответствует вашей данной собственности. Это в основном используется, когда вы уверены в данном свойство, но не о том теге, в котором элемент может поставляться, например, предположим, что я хочу, чтобы список всех элементов с идентификатором " xyz " был в любом теге.
надеюсь, что это помогает :)