В XPATH не подставляется значение переменной



  • Скрипт:
    0_1553529459599_Тест - Подстановка переменной в XPATH.xml

    Что делает скрипт:
    Скрипт заходит на страничку:
    https://agroserver.ru/user/248200/
    Затем находит блок «Контакты»
    Затем перебирает все свойства в блоке «Контакты» (я намеренно упростил действие с каждым свойством - в реальности будет копирование свойства в переменную, но сейчас я поставил просто вывод сообщения в лог)

    В чём проблема:
    В XPATH не подставляется значение переменной.

    Почему я использую такой хитрый XPATH:
    Потому что на страничке используются одни и те же html конструкции для блоков «Товары и услуги» и «Контакты». То есть различить их можно только по XPATH с указанием номера div:

    XPATH>//div[@class="right"]/div[1]
    XPATH>//div[@class="right"]/div[2]

    Проблема в том, что на страничке может быть разное количество блоков.

    Может быть только один блок «Товары и услуги»:
    https://agroserver.ru/user/240930/

    А может не быть никаких блоков:
    https://agroserver.ru/user/241235

    А может быть только только один блок «Контакты»:
    https://agroserver.ru/user/248815/

    Потому я не могу обратиться сразу к нужному блоку контакты. Приходится перебирать все блоки. А затем, когда нахожу нужный блок, приходится обращаться к этому блоку через XPATH с переменной внутри (ведь я заранее не знаю, какой будет номер div'а у блока «Контакты»).

    Думал можно сделать определение по количеству блоков, типа посчитал блоки на странице и если их 2, то обращаюсь ко второму. Однако у меня нет уверенности, что блоки всегда идут по порядку. Может будет ситуация, когда блок Контакты будет первым, а за ним блок «Товары и услуги».

    Почему же не работает подстановка переменной в XPATH, @support, @Fox?



  • @morozover said in В XPATH не подставляется значение переменной:

    XPATH>//div[@class="right"]/div[1]

    Если нужен только блок "Контакты", то почему сразу не искать его?
    И уже если он существует, то брать из него данные.

    Типо такого:

    //div[@class="rblock"]/div[contains(text(),"Контакты:")]/../ul/li
    


  • @morozover said in В XPATH не подставляется значение переменной:

    В чём проблема:
    В XPATH не подставляется значение переменной.

    Синтаксическая ошибка происходит из за идущих трёх подряд квадратных скобок:
    >XPATH>//div[@class="right"]/div[[[MY_CYCLE_INDEX]]]/ul/li

    если их разделить пробелом

    >XPATH>//div[@class="right"]/div[ [[MY_CYCLE_INDEX]] ]/ul/li

    то всё будет работать
    0_1553534165001_2f6f724a-6f4f-4f74-8342-3579e5b1598c-изображение.png

    либо записать так:
    >XPATH>//div[@class="right"]/div[VAR_MY_CYCLE_INDEX]/ul/li



  • @fox спасибо! понял.

    Но теперь новая загадка: почему скрипт запускает главный цикл 3 раза?
    У меня на страничке 2 блока div[@class="rblock"].

    Вроде бы цикл должен выполниться 2 раза.

    А он выполняется 3 раза и зависает тут:
    Ожидаю элемент >XPATH>//div[@class="rblock"]/div[@class="title"]>AT>3
    Это понятно, почему скрипт виснет тут.

    НО почему цикл запускается третий раз? Хотя должен запуститься только 2 раза!

    Вот поправленный скрипт:
    0_1553585985824_Тест - Подстановка переменной в XPATH.xml



  • @morozover said in В XPATH не подставляется значение переменной:

    @fox спасибо! понял.

    Но теперь новая загадка: почему скрипт запускает главный цикл 3 раза?
    У меня на страничке 2 блока div[@class="rblock"].

    Вроде бы цикл должен выполниться 2 раза.

    А он выполняется 3 раза и зависает тут:
    Ожидаю элемент >XPATH>//div[@class="rblock"]/div[@class="title"]>AT>3
    Это понятно, почему скрипт виснет тут.

    НО почему цикл запускается третий раз? Хотя должен запуститься только 2 раза!

    Вот поправленный скрипт:
    0_1553585985824_Тест - Подстановка переменной в XPATH.xml

    Это баг вложенных действий "Начать Цикл", по умолчанию количество элементов от селектора записывается в переменную ELEMENT_LENGTH и значение из внутреннего цикла перетирает значение из внешнего, можно в коде скрипта изменить название переменной внутреннего цикла и всё будет работать. Сейчас оформляю баг для @support'a.



  • @fox То есть я поймал именно баг? Или я что-то в скрипте накосячил с этой переменной ELEMENT_LENGTH?



  • @morozover said in В XPATH не подставляется значение переменной:

    @fox То есть я поймал именно баг? Или я что-то в скрипте накосячил с этой переменной ELEMENT_LENGTH?

    Ну я как бы специально выделил это слово :D. Но @support уже выпустил патч, по этому придется ждать 2 недели. Сейчас можно вообще отказаться от использования вложенных действий "Начать Цикл".

    Править код. Там не сложно, нужно только изменить имя переменной [[ELEMENT_LENGTH]] в коде во вложенном скрипте. Вот тестовый скрипт

    Заменить действие "Начать Цикл" обычным циклом. Скрипт.


Log in to reply
 

  • 7
  • 14
  • 6
  • 5
  • 1
  • 19
  • 4
  • 2