Нужна помощь xPath: номер элемента постоянно меняется

  • Автор темы Автор темы Leoneed
  • Дата начала Дата начала
  • Теги Теги
    xpath

Leoneed

Client
Регистрация
03.05.2015
Сообщения
56
Реакции
38
Баллы
18
Добрый день!

На странице несколько селект боксов.
После выбора первого (категория товара), второй уже не выбирается, т.к. номер элемента меняется =(
C#:
Развернуть Свернуть Копировать
instance.ActiveTab.FindElementByXPath(".//ul[3]/li[29]/a", 0).Click(); //категория товара
System.Threading.Thread.Sleep(5000);
instance.ActiveTab.FindElementByXPath(".//ul[23]/li[6]/a", 0).Click(); //Подкатегория. номер ul постоянно разный
Страница для опытов: http://chance.ru/add

Как в данном случае использовать xPath?

P.S.
Перебирать в коллекции номера элементов ul в подкатегории не вариант, т.к. встречаются совпадения названий (нет уникального признака, чтобы запилить [contains(text(), 'нужныый текст')]
 
Последнее редактирование:
А мисье знает в толк для извращения)

Мб не использовать цифра, а привязаться как-то к другому элементу, скиньте скрин того, что надо, напишу нормальный xpath путь
 
Как насчет идеи привязаться к rel?

irBayYU.png


К слову, rel - это копия значения из value (option):
CeQu79C.png
 
  • Спасибо
Реакции: Sz5
А мисье знает в толк для извращения)

Мб не использовать цифра, а привязаться как-то к другому элементу, скиньте скрин того, что надо, напишу нормальный xpath путь
Надо именно выбирать подкатегорию через xPath. Не совсем понимаю, чем в данном случае поможет скрин.

Как насчет идеи привязаться к rel?
Не получается =(
К rel можно привязаться, но .Click отрабатывает только при выборе основной категории =(
C#:
Развернуть Свернуть Копировать
instance.ActiveTab.FindElementByXPath(".//ul/li/a[contains(@class, 'parent')][contains(@rel, '402')]", 0).Click(); //категория
System.Threading.Thread.Sleep(5000);
instance.ActiveTab.FindElementByXPath(".//ul/li/a[contains(@class, 'parent')][contains(@rel, '404')]", 0).Click(); //Подкатегория не выбирается
 
Последнее редактирование:
А почему у тебя у категории и подкатегории одинаковые rel? Не думаю, что у них там они одинаковые.
Ну и чтоб подкатегория выбиралась - лучше другой селектор придумать, чтобы он не был похож на первый, чтобы случайно первый не сработал (сейчас срабатывает первый, на категорию, в обоих случаях)

ЗЫ: у ul лучше тоже селектор прописывать, надежнее будет
 
А почему у тебя у категории и подкатегории одинаковые rel? Не думаю, что у них там они одинаковые.
Ну и чтоб подкатегория выбиралась - лучше другой селектор придумать, чтобы он не был похож на первый, чтобы случайно первый не сработал (сейчас срабатывает первый, на категорию, в обоих случаях)
ЗЫ: у ul лучше тоже селектор прописывать, надежнее будет

rel - разные (именно те, которые соответствуют)
У них там "категория" rel=402, "подкатегория" rel=403, rel=404, rel=405 и т.д.
ul селектор прописывал - не помогает =(
 
Попробовал привязаться только к видимым элементам ul
C#:
Развернуть Свернуть Копировать
instance.ActiveTab.FindElementByXPath(".//ul[not(contains(@style,'display:none'))]/li/a[contains(@class, 'parent')][contains(@rel, '402')]", 0).Click();// категория
System.Threading.Thread.Sleep(6000);
instance.ActiveTab.FindElementByXPath(".//ul[not(contains(@style,'display:none'))]/li/a[contains(@class, 'parent')][contains(@rel, '404')]", 0).Click();// Подкатегория
В конструкторе Firepath показывает только 1 совпадение для подкатегории (тоесть должно всё работать)
D7Ggc9f.png


Не работает =(
Есть идеи?
 
При тестировании в FirePath скорее всего подкатегория была "раскрыта", поэтому сработало правило not(contains(@style,'display:none')). А когда в PM тестишь - ты не "раскрываешь" её также руками.
Попробуй не открывать подкатегорию и перепроверяй XPath, скорее всего проблема только в том, что он кривовато написан :)
 
  • Спасибо
Реакции: Leoneed
УРА!
Я его почти победил. Всё оказалось просто.
Работает следующий xPath:
C#:
Развернуть Свернуть Копировать
instance.ActiveTab.FindElementByXPath(".//ul/li[2]/a[contains(text(),'Продам')]", 0).Click(); // Подкатегория
Вся фишка просто в номере совпадения. В коде выше - клик на подкатегорию "продам" по совпадению 0.
При каждой повторной смене подкатегории ajax выдаёт +1 совпадение и сайт принимает клик только по последнему!
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)