Перескакивание действий между функциями



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


  • Banned

    Если не ошибаюсь... Если асинхронные функции запускаете, то это был бы баг. Если обычные у вас функции, то не удивительно... Сделайте разные названия меток и проблема исчезнет. Если, я конечно правильно понял вашу проблемы.
    P.S. Тестовый скрипт не смотрел....



  • @Игорь777 Метки то я как раз уже переименовал и все заработало. Я просто хочу понять, баг это или нет. Есть подозрение, что метка как глобальная переменная, чтобы можно было вернуться из любого места в нужное место в нужную функцию. Но тогда это нужно добавить в описание к метке! А так из описания к функции и отсутствия данной приписке в описании к метке возникает недопонимание.


  • Banned

    @DraikKin Хм... Ну на форуме часто встречал сообщения, что меткие надо писать с уникальынми названиями... По поводу бага, спорный вопрос... Если учесть, что в BAS выполнение всех действий идет последовательно, то можно считать это неким багом)



  • А причем тут потоки к функциям? Функция это не поток и "Недавно начатые потоки не знают о переменных или состоянии браузера в потоке, который их запускали, поэтому обмен данными между стартовым потоком и недавно созданными может осуществляться только с помощью глобальных переменных или ресурсов." Тут вообще не к месту.Для теста в функции а создаем переменную а в функции б ее выводим в лог:В логе будет наша переменная.Так что это не баг а невнимательность



  • В функции один метку надо ставить fun1 если это не общее действие, за границей функции и будет порядок.



  • Вообще косяк баса если он даёт ставить одинаковые метки, просто я не встречался с этим, потому что в голове точка входа всегда уникальная.


Log in to reply
 

  • 6
  • 2
  • 16
  • 15
  • 5
  • 4
  • 5
  • 5