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

Leoneed

Client
Регистрация
03.05.2015
Сообщения
55
Благодарностей
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(), 'нужныый текст')]
 
Последнее редактирование:

Sz5

Client
Регистрация
10.12.2012
Сообщения
157
Благодарностей
186
Баллы
43
А мисье знает в толк для извращения)

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

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Как насчет идеи привязаться к rel?



К слову, rel - это копия значения из value (option):
 
  • Спасибо
Реакции: Sz5

Leoneed

Client
Регистрация
03.05.2015
Сообщения
55
Благодарностей
38
Баллы
18
А мисье знает в толк для извращения)

Мб не использовать цифра, а привязаться как-то к другому элементу, скиньте скрин того, что надо, напишу нормальный 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(); //Подкатегория не выбирается
 
Последнее редактирование:

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
А почему у тебя у категории и подкатегории одинаковые rel? Не думаю, что у них там они одинаковые.
Ну и чтоб подкатегория выбиралась - лучше другой селектор придумать, чтобы он не был похож на первый, чтобы случайно первый не сработал (сейчас срабатывает первый, на категорию, в обоих случаях)

ЗЫ: у ul лучше тоже селектор прописывать, надежнее будет
 

Leoneed

Client
Регистрация
03.05.2015
Сообщения
55
Благодарностей
38
Баллы
18
А почему у тебя у категории и подкатегории одинаковые rel? Не думаю, что у них там они одинаковые.
Ну и чтоб подкатегория выбиралась - лучше другой селектор придумать, чтобы он не был похож на первый, чтобы случайно первый не сработал (сейчас срабатывает первый, на категорию, в обоих случаях)
ЗЫ: у ul лучше тоже селектор прописывать, надежнее будет
rel - разные (именно те, которые соответствуют)
У них там "категория" rel=402, "подкатегория" rel=403, rel=404, rel=405 и т.д.
ul селектор прописывал - не помогает =(
 

Leoneed

Client
Регистрация
03.05.2015
Сообщения
55
Благодарностей
38
Баллы
18
Попробовал привязаться только к видимым элементам 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 совпадение для подкатегории (тоесть должно всё работать)


Не работает =(
Есть идеи?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
При тестировании в FirePath скорее всего подкатегория была "раскрыта", поэтому сработало правило not(contains(@style,'display:none')). А когда в PM тестишь - ты не "раскрываешь" её также руками.
Попробуй не открывать подкатегорию и перепроверяй XPath, скорее всего проблема только в том, что он кривовато написан :-)
 
  • Спасибо
Реакции: Leoneed

Leoneed

Client
Регистрация
03.05.2015
Сообщения
55
Благодарностей
38
Баллы
18
УРА!
Я его почти победил. Всё оказалось просто.
Работает следующий xPath:
C#:
instance.ActiveTab.FindElementByXPath(".//ul/li[2]/a[contains(text(),'Продам')]", 0).Click(); // Подкатегория
Вся фишка просто в номере совпадения. В коде выше - клик на подкатегорию "продам" по совпадению 0.
При каждой повторной смене подкатегории ajax выдаёт +1 совпадение и сайт принимает клик только по последнему!
 

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