Перейти к содержимому

Фотография

Проблема с xpath по тексту


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 18

#1 Vitalik_V

Vitalik_V

    Активный участник

  • Members
  • PipPip
  • 149 сообщений
  • ФИО:Виталий
  • Город:Харьков

Отправлено 22 мая 2014 - 15:01

Доброго времени суток, столкнулся с такой проблемой

вот html http://screencast.com/t/fmLe7F4b4

 

когда выполняю getText из первого label, возвращает правильное значение Entire list

но когда пытаюсь сделать xpath через текст //label[contains(text(),'Entire list'], то элемент не находится...

кто то сталкивался с подобным поведением xpath? Если да, то как решить?

 


  • 0

#2 FibYar

FibYar

    Новый участник

  • Members
  • Pip
  • 57 сообщений
  • ФИО:Большаков Виталий

Отправлено 23 мая 2014 - 05:04


//label[contains(text(),'Entire list'],

 

Добрый день! Надеюсь, что отсутствие закрывающей скобки после 'Entire list' - это опечатка только на форуме?


  • 0

#3 Vitalik_V

Vitalik_V

    Активный участник

  • Members
  • PipPip
  • 149 сообщений
  • ФИО:Виталий
  • Город:Харьков

Отправлено 23 мая 2014 - 07:49

 

//label[contains(text(),'Entire list'],

 

Добрый день! Надеюсь, что отсутствие закрывающей скобки после 'Entire list' - это опечатка только на форуме?

 

Да, это я на форуме опечатался, вот так - //label[contains(text(), 'Entire list')] не работает


  • 0

#4 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 23 мая 2014 - 08:09

http://www.w3.org/TR...#location-paths

 

 

child::text() selects all text node children of the context node

 

 


  • 0

#5 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 23 мая 2014 - 08:09

А фаерпас находит?


  • 0

#6 FibYar

FibYar

    Новый участник

  • Members
  • Pip
  • 57 сообщений
  • ФИО:Большаков Виталий

Отправлено 23 мая 2014 - 08:19

Попробуйте еще label заменить на звездочку (*). У меня в моем веб-приложении как-то была проблема с нестандартными тэгами (round, ещё какие-то) - они просто не находились.


  • 0

#7 Vitalik_V

Vitalik_V

    Активный участник

  • Members
  • PipPip
  • 149 сообщений
  • ФИО:Виталий
  • Город:Харьков

Отправлено 23 мая 2014 - 08:29

А фаерпас находит?

да, он находит. Еще когда пытаюсь найти путь непосредственно к тексту, оно выдает - .//label[1]/text()[3], а IDE на него ругается error = TypeError: e.scrollIntoView is not a function

 

Получается в селениуме используется какой то урезанный xpath?


  • 0

#8 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 23 мая 2014 - 08:37

Еще когда пытаюсь найти путь непосредственно к тексту, оно выдает - .//label[1]/text()[3], а IDE на него ругается error = TypeError: e.scrollIntoView is not a function
 
Получается в селениуме используется какой то урезанный xpath?

Текстовая нода не является html элементом. И на это вполне логично реагирует IDE.
  • 0

#9 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 23 мая 2014 - 12:03

Вот еще несколько вырезок из спецификации, которые, возможно, помогут понять, что собственно происходит. И что тут нет никакой проблемы или "урезаности" - все в рамках спеки.

A node-set is converted to a string by returning the string-value of the node in the node-set that is first in document order.


The contains function returns true if the first argument string contains the second argument string


  • 0

#10 Bess

Bess

    Активный участник

  • Members
  • PipPip
  • 91 сообщений

Отправлено 02 мая 2016 - 17:21

подскажите пожалуйста как сократить xpath, чтобы не занимал много места?
что-то гуглю, но всё не то

буду рад если ссылку на материал дадите
 

вот мой пример:
"html/body/div[2]/div[4]/div/div[5]/div/div/div/div[1]/div/div[2]/div[1]/ol/li[3]/ol/li[1]/div/div[2]/h3/a"


  • 0

#11 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 03 мая 2016 - 04:58

подскажите пожалуйста как сократить xpath, чтобы не занимал много места?
что-то гуглю, но всё не то

буду рад если ссылку на материал дадите
 

вот мой пример:
"html/body/div[2]/div[4]/div/div[5]/div/div/div/div[1]/div/div[2]/div[1]/ol/li[3]/ol/li[1]/div/div[2]/h3/a"

Ищите конкретный элемент по уникальным атрибутам (класс, id, name итд.). А так же читайте http://www.w3schools...path_syntax.asp


  • 0

#12 Bess

Bess

    Активный участник

  • Members
  • PipPip
  • 91 сообщений

Отправлено 03 мая 2016 - 05:03

нет конкретных атрибутов для всех требуемых элементов, а так конечно если они есть, то вбиваю их


  • 0

#13 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 03 мая 2016 - 06:44

нет конкретных атрибутов для всех требуемых элементов, а так конечно если они есть, то вбиваю их

 

а м.б. ты не совсем понимаешь, что такое атрибут ? :)


  • 0

#14 Bess

Bess

    Активный участник

  • Members
  • PipPip
  • 91 сообщений

Отправлено 03 мая 2016 - 09:40

 

нет конкретных атрибутов для всех требуемых элементов, а так конечно если они есть, то вбиваю их

 

а м.б. ты не совсем понимаешь, что такое атрибут ? :)

 

я отталкиваюсь от того, что человек привел как пример: "(класс, id, name итд.)."
если у элемента есть айди, то я ищу по айди (find element by id,  by name и тд)
если есть имя я ищу по имени
в данном случае ничего такого не было, поэтому искал по xpath

имелось ввиду что-то иное?


  • 0

#15 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 03 мая 2016 - 11:26

 

 


имелось ввиду что-то иное?

 

 

что-то иное

 

см. видео про локаторы


  • 0

#16 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 04 мая 2016 - 12:03

Вы бы привели лучше кусок кода, так сложно сказать, что из этой цепочки можно безболезненно выкинуть (ну кроме начальных "html/body").

Например, сколько у вас элементов ol (не вложенных в другой ol)?

Если один - можно сократить уже до "//ol/li[3]/ol/li[1]/div/div[2]/h3/a".

Если ol вложенный в другой ol один - можно оставить "//ol//ol/li[1]/div/div[2]/h3/a".

Дальше смотрите, почему у вас li[1] и div[2] - это с равным успехом может быть и особенностью структуры (в других li и div'ах совершенно другое содержимое, относящееся к тому же объекту, т.е. один объект - один отдельный ol, встречается и такое), и необходимостью выбора нужного пункта (тогда у каждого объекта - свой li и свой div).

В первом случае - скорее всего можно сократить до "//ol//ol//h3/a".

При любом раскладе - в коде ещё почти наверняка куча моментов, которые можно было бы использовать не только и не столько для сокращения длины текста локатора, сколько для его оптимизации и приведения к конкретному универсальному виду.


  • 0

#17 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 04 мая 2016 - 13:12

с элементами у которых нет уникальных атрибутов обычно поступаю так - ищу какой-то уникальный якорь либо child элемента, либо parent относительно которого искомый элемент всегда имеет неизменное положение и составляю xpath отталкиваясь от этого. Если у самого элемента нет никаких опознавательных знаков, то уж у одного из parent'ов всяко будет.


  • 1

#18 clipsa

clipsa

    Специалист

  • Members
  • PipPipPipPipPip
  • 527 сообщений
  • ФИО:Ермолаева Ольга
  • Город:Москва


Отправлено 04 мая 2016 - 14:01

Если у самого элемента нет никаких опознавательных знаков, то уж у одного из parent'ов всяко будет.

согласна, тоже так делаю - parent, child или sibling - где-то да найдётся элемент с определенным атрибутом, к которому можно привязаться.


  • 0

Не следует заставлять тестировщиков тестировать быстрее. Что может быть хуже испуганных, усталых, цинично настроенных тестировщиков?
-----------------
Хорошо, когда человек заводит баги. Плохо, когда баги заводят человека (с)
-----------------
Проект для начинающих тестировщиков Хомячки


#19 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 04 мая 2016 - 14:34

 

Если у самого элемента нет никаких опознавательных знаков, то уж у одного из parent'ов всяко будет.

согласна, тоже так делаю - parent, child или sibling - где-то да найдётся элемент с определенным атрибутом, к которому можно привязаться.

 

Аналогично, в т.ч. по сиблингам приходится локаторы делать :(.


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных