Здравствуйте! Не знаю сообщалось ли о данном баге и вообще баг ли это, но на понимание этой "фичи" у меня вчера ушло около 2ух часов. Суть в следующем:
У меня в проекте несколько функции внутри которых отправляются одинаковый запрос, но с разными передающимися параметрами. Так же после отправки get запроса я проверяю статус ответа и если он отличен от 200, то повторяю запрос путем возврата к метке, установленной перед запросом. Имена меток внутри каждой функции одинаковы.
Проверяя работу проекта в режиме записи все отрабатывается как положено, код читается поэтапно, в случае "неверного" ответа происходит возврат к метке, после отработки одной функции переходит в следующую и там все нормально. Но запустив в режиме "запуск" я очень удивился увидев в логах что идет постоянно ошибка 404 - неверные параметры в запросе отправленные клиентом серверу. Как так, ведь я только что отправлял те же самые параметры и все было нормально?
Сначала полез смотреть еще раз код, еще раз проверял в режиме "запись". все нормально. Потом я добавил в лог отображение текста ответа, но в режиме "запись" он не отображался!! Я немного офигел и решил изменить текст лога при ответе отличном от 200. Какого же было мое удивление, когда я увидел в логе старый вариант ответа!! Я начал и пересохранять проект, проверять на ошибки, все бестолку.
Убил на это почти 2 часа, дело было уже ночью и голова уже кипела, видимо поэтому не сделал сразу следующее, а нужно было начать именно с этого: посмотрел номер действия вызывающего данный лог. И очень удивился когда обнаружил, что он вызывается совсем из дугой функции!
И тут до меня дошло, что в режиме "запись" код читался последовательно и метка ставилась 1 . А в режиме "запуск", когда действие доходит до создание метки, она ставится сразу во всех функциях, а т.к. название у меток одинаково во всех функциях, при действии возврат к метке происходит переход к последней поставленной метке, тобишь к совсем другой функции, где переданные параметры не верны и отсюда статус 404!!
Я как-то не ожидал такого, ведь в описании к функции сказано: "Недавно начатые потоки не знают о переменных или состоянии браузера в потоке, который их запускали, поэтому обмен данными между стартовым потоком и недавно созданными может осуществляться только с помощью глобальных переменных или ресурсов.". Получается что функция это закрытый контейнер, который не знает что творится в других функциях и войти в него с параметрами можно только через глобальные переменные. А на практике получается, что переход к метке виден любой функции или точнее переход происходит к последней выставленной метке.
Для проверки данного бага прилагаю простенький проект.
Эксперимент.xml
P.S.: Да, забыл написать, версия движка 24.1.1