Блог вебразработчика
  • ГЛАВНАЯ
  • ПОДПИСКА

Введение в XPath (часть 3). Функции

Июл04
2012
Написал Tatyana

XPath содержит библиотеку встроенных функций для преобразования данных и обработки узлов.

Функции обработки наборов узлов
  • node-set node() — возвращает все узлы. В отличие от «*» функция возвращает также текстовые узлы.
xpath: .//div/*

<div>
    Текстовый узел 1
    <span>текст внутри элемента</span>
    Текстовый узел 2
    <p>снова текст внутри элемента</p>
</div>
xpath: .//div/node()

<div>
    Текстовый узел 1
    <span>текст внутри элемента</span>
    Текстовый узел 2
    <p>снова текст внутри элемента</p>
</div>
  • String text() — возвращает набор текстовых узлов;
xpath: .//span[text()="текст внутри элемента"]

<div>
    Текстовый узел 1
    <span>текст внутри элемента</span>
    Текстовый узел 2
    <p>снова текст внутри элемента</p>
</div>
xpath: .//span[contains(text(),"текст внутри элемента")]

<div>
    Текстовый узел 1
    <span>текст внутри элемента</span>
    Текстовый узел 2
    <p>снова текст внутри элемента</p>
</div>
  • number position() — возвращает позицию элемента в множестве.
xpath: .//div/input[position()=2]
             или
xpath: .//div/input[2]

<div>
    <label for="login">Имя пользователя</label>
    <input type="text" id="login" value="">
    <label for="password">Пароль</label>
    <input type="text" id="password" value="">
</div>
  • number last() — возвращает номер последнего элемента в множестве. Функция first() не предусмотрена. Для доступа к первому элементу используйте индекс «1».
xpath: .//div/label[last()]

<div>
    <label for="login">Имя пользователя</label>
    <input type="text" id="login" value="">
    <label for="password">Пароль</label>
    <input type="text" id="password" value="">
</div>
  • number count(node-set) — возвращает количество элементов в node-set.
xpath: .//div[count(span)=2]

<div>
    <span>Авторизация</span>
</div>
<div>
    <span>Имя пользователя:</span>
    <input type="text" id="login" value="">
    <span>Пароль</span>
    <input type="text" id="password" value="">
</div>
  • node-set id(object) — находит элемент с уникальным идентификатором.
xpath: id('password')
 .//id('password') - неверный xpath

<div>
    <label for="login">Имя пользователя</label>
    <input type="text" id="login" value="">
    <label for="password">Пароль</label>
    <input type="text" id="password" value="">
</div>
Строковые функции
  • string string(object) — возвращает текстовое содержимое элемента. По сути возвращает объединенное множество текстовых узлов на один уровень ниже.
  • string concat(string, string, string*) — объединяет две или более строк
  • number string-length(string) — возвращает длину строки.
  • boolean contains(string, string) — возвращает true, если первая строка содержит вторую, иначе возвращает false.
  • string substring(string, number, number) — возвращает строку вырезанную из строки начиная с указанного номера, второй параметр number (необязательный) — количество символов.
  • string substring-before(string, string) — если найдена вторая строка в первой, возвращает строку до первого вхождения второй строки.
  • string substring-after(string, string) — если найдена вторая строка в первой, возвращает строку после первого вхождения второй строки.
  • boolean starts-with(string, string) — возвращает true если первая строка начинается со второй, иначе возвращает false.
  • boolean ends-with(string, string) — возвращает true если первая строка заканчивается второй, иначе возвращает false.
  • string normalize-space(string) — убирает лишние и повторные пробелы, а также управляющие символы, заменяя их пробелами.
  • string translate(string, string, string) — заменяет символы первой строки, которые встречаются во второй строке, на соответствующие позиции символам из второй строки символы из третьей строки. translate(«cat», «abc», «ABC») вернет CAt.
xpath: .//label[contains(text(),"пользователя")]
               или
 .//label[starts-with(text(),"Имя")]

<div>
    <label for="login">Имя пользователя</label>
    <input type="text" id="login" value="">
    <label for="password">Пароль</label>
    <input type="text" id="password" value="">
</div>
Логические функции

or — логическое «или»
and — логическое «и»
= — логическое «равно»
< (<) — логическое «меньше»
> (>) — логическое «больше»
= (>=) — логическое «больше либо равно»
boolean boolean(object) — приводит объект к логическому типу;
boolean true() -возвращает истину.
boolean false() — возвращает ложь.
boolean not(boolean) — логическое отрицание, возвращает true если аргумент false и наоборот.

xpath: .//label[text()="Пароль" and @for="password"]
               или
 .//label[not(@for="login")]

<div>
    <label for="login">Имя пользователя</label>
    <input type="text" id="login" value="">
    <label for="password">Пароль</label>
    <input type="text" id="password" value="">
</div>
Числовые функции

+ — сложение
− — вычитание
* — умножение
div — обычное деление (не деление нацело!)
mod — остаток от деления
number number(object) — переводит объект в число.
number sum(node-set) — возвращает сумму множества, каждый тег множества будет преобразован в строку и из него получено число.
number floor(number) — округление аргумента в меньшую сторону.
number ceiling(number) — округление элемента в большую сторону.
number round(number) — округление числа по математическим правилам.

xpath: .//div/*[position() mod 2 = 0]

<div>
    <label for="login">Имя пользователя</label>
    <input type="text" id="login" value="">
    <label for="password">Пароль</label>
    <input type="text" id="password" value="">
</div>
  • Нравится
  • Tweet

Опубликовано в Тестирование - Помечено XPath
Рассказать всем Twitter Facebook Delicious StumbleUpon E-Mail
← Продвинуться и заработать
Selenium Driver: наведение курсора мыши на элемент →

4 комментариев

  1. Elena's Gravatar Elena
    07.07.2014 at 09:13 | Permalink

    Я ошибаюсь, или в примере использование логических функций у вас ошибка — выделен не тот элемент, который должен сообветствовать запросу?
    Вот этому запросу
    .//label[text()=»Пароль» and @for=»password»]
    или
    .//label[not(@for=»login»)]
    соответствует вот этот элемент
    Пароль

    • Tatyana's Gravatar Tatyana
      07.07.2014 at 11:31 | Permalink

      Да, спасибо, исправила ))

  2. iLight's Gravatar iLight
    17.12.2014 at 16:27 | Permalink

    Спасибо, хороший мануал

  3. repon's Gravatar repon
    10.12.2015 at 10:03 | Permalink

    спасибо, в избранное.
    но вопрос — не подскажете,Как найти элемент, у которого соседний элемент ***.

    [td]
    [input type=»radio»/]
    [label]первый[/label]
    [/td]
    [td]
    [input type=»radio»/]
    [label]второй[/label]
    [/td]

    вот2 rb я могу найти:
    .//*[@id=’workitemForm:taxablePeriod’]/table/tbody/tr[1]/td //input[@type=’radio’]

    или первый
    .//*[@id=’workitemForm:taxablePeriod’]/table/tbody/tr[1]/td/div/div/span/table/tbody/tr/td[1]/input[@type=’radio’]

    как найти первого, без длинного запроса?)

  1. Введение в XPath (часть 4). Советы — Блог вебразработчика on 09.07.2012 at 10:18

Свежие записи

  • WebDriver и SSL Untrusted certificate
  • Видеозапись выполнения тестов Selenium
  • Selenium WebDriver: basic авторизация
  • BrowserMob Proxy + Selenium: автоматизация сбора данных о производительности
  • Hibernate 4: UserType пользовательский тип данных (часть 2)

Поиск

Рубрики

  • Hibernate ORM
  • SEO
  • Разное
  • Тестирование
    • JUnit
    • Selenium
    • Thucydides

Метки

Actions AJAX Alert AutoIt ChromeDriver Exceptions ExpectedConditions FindElement FirefoxDriver Hibernate InternetExplorerDriver Java Javascript Jenkins JUnit4 Maven PageFactory Page Object RemoteWebDriver Select Selenium IDE Selenium Server Selenium WebDriver switchTo Thucydides WebDriverWait XPath Автоматизированное тестирование база данных заработок в сети сеть Интернет скорость продвижения сайта статейное продвижение услуги продвижения

Реклама


Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.

Блог вебразработчика
Функциональное тестирование и продвижение сайтов

Яндекс.Метрика