Баг с опцией "Остановить поток, если элемент не найден."

Поддержка
  • С этими опциями изначально были какие то проблемы (какие точно - не помню) по этому я ими не пользовался. Но сейчас из за соседней темы решил разобраться.

    Перебрал сейчас все действия (или почти все) где есть эти опции, проверял на странице https://www.google.ru по несуществующему элементу >CSS> #text, в итоге почти все действия работаю правильно:

    1. Получить Код Элемента
    2. Получить Текст
    3. Выполнить Javascript На Элементе
    4. Скриншот (элемента)
    5. Решить Recaptcha 2.0
    6. Решить Капчу
    7. Прокрутка К Элементу
    8. Получить координаты
    9. Получить Стиль Элемента
    10. Получить Атрибут Элемента
    11. Установить Атрибут Элемента
    12. Установить Значение Комбобокса
    13. Установить Индекс Комбобокса
    14. Выбрать Случайный Элемент Из Комбобокса

    Но есть действия, которые вылетают с ошибкой Таймаут во время выполнения random point[documentRoot, css #text]:

    1. Начать Перетаскивание На Элементе
    2. Закончить Перетаскивание На Элементе
    3. Очистить Поле
    4. Двигать Мышь Над Элементом
    5. Ввод текста

    Вот тестовый скрипт


    Ошибка возвращается из функции _random_point()

       _SELECTOR = " \u003eCSS\u003e #text";
       _call(_random_point, {})!
       _if(_result().length > 0, function(){
       move( {} )!
       get_element_selector(_SELECTOR, false).nowait().clarify(X,Y)!
       _call(_clarify, {} )!
       mouse(X,Y)!
       page().type("фывафыва",0)!
       })!
    

    Функция судя по всему нужна для определения случайных координат на элементе (но ближе к центру) для наведения курсора. Не знаю, можно ли постить код функции из исходников BAS'a, по этому скажу только, что в ней есть небольшая ошибка если элемента не существует.


    Чтобы действия не возвращали ошибку можно просто убрать или закомментировать фунцию:

       _SELECTOR = " \u003eCSS\u003e #text";
       //_call(_random_point, {})!
       _if(_result().length > 0, function(){
       move( {} )!
       get_element_selector(_SELECTOR, false).nowait().clarify(X,Y)!
       _call(_clarify, {} )!
       mouse(X,Y)!
       page().type("фывафыва",0)!
       })!
    

    Но тогда действие будет пропускаться даже если селектор на странице есть (действие становится бесполезным)
    Тестовый скрипт


    Исправленную функцию скинул @support 'y. Может он её добавит в BAS, а может добавит проверку существования элемента в каждое действие, или решит эту задачу по своему.

  • Для поиска ReferenceError: Can't find variable: _random_point во время выполнения действия
    Тоже с таким столкнулся в действии ввод текста

  • В чем собственно баг? Я всегда это действие заворачиваю в блок игнор ошибок и ставлю условие WAS_ERROR. А с какой ошибкой оно там вылетело меня мало волнует (таймаут или не найдено). В любом случае действие должно отработать без ошибки.

  • @fastspace said in Баг с опцией "Остановить поток, если элемент не найден.":

    В чем собственно баг?

    Действия в которых отключенная опция "Остановить поток, если элемент не найден." всё равно завершит поток с ошибкой.

    Я всегда это действие заворачиваю в блок игнор ошибок

    Какое "это" действие? Я привёл 14 действий в которых эта опция работает
    0_1546801809702_73759f6c-356e-49c5-8ba8-5f5916a07dad-изображение.png
    и 5 действий, в котором она не работает.

    А с какой ошибкой оно там вылетело меня мало волнует (таймаут или не найдено). В любом случае действие должно отработать без ошибки.

    Программная ошибка (жарг. баг) — означает ошибку в программе или в системе, из-за которой программа выдает неожиданное поведение и, как следствие, результат.

    Игнорирование ошибок, кстати, от всех ошибок не спасёт, если, например, ошибка будет критической.

  • Еще вот такие ошибки

    Таймаут во время выполнения script for[documentRoot, css  .stream-items>li]
    Таймаут во время выполнения exist for[documentRoot, css  .stream-items>li]
    Таймаут во время выполнения xml for[documentRoot, css  .stream-items]
    

    жду обновления пока не хочу проект переделывать изза этих ошибок

  • @gamid said in Баг с опцией "Остановить поток, если элемент не найден.":

    Еще вот такие ошибки

    Таймаут во время выполнения script for[documentRoot, css  .stream-items>li]
    Таймаут во время выполнения exist for[documentRoot, css  .stream-items>li]
    Таймаут во время выполнения xml for[documentRoot, css  .stream-items]
    

    жду обновления пока не хочу проект переделывать изза этих ошибок

    Хоть бы пояснил, что вызывает эти ошибки. А то у меня больше маны нет, кончилась :D.

  • @fox это мелочь)) таких мелочей десятки и ничего страшного, легко их обойти. Даже есть критичные типо неработающего акшена удалить кэш. Плюс Я недавно авторег пилил и на одном сайте стабильно вылетает браузер в режиме записи на действие "изучить элемент на странице". Я даже об этом не стал сообщать))) а тут... По поводу таймаута ошибки все те действия у которых ошибка таймаута они завёрнуты в игнор ошибок и абсолютно пофигу на разновидность ошибки поиска элемента. С ними не возникает критических ошибок.

  • @fastspace said in Баг с опцией "Остановить поток, если элемент не найден.":

    @fox это мелочь)) таких мелочей десятки и ничего страшного, легко их обойти. Даже есть критичные типо неработающего акшена удалить кэш. Плюс Я недавно авторег пилил и на одном сайте стабильно вылетает браузер в режиме записи на действие "изучить элемент на странице". Я даже об этом не стал сообщать))) а тут... По поводу таймаута ошибки все те действия у которых ошибка таймаута они завёрнуты в игнор ошибок и абсолютно пофигу на разновидность ошибки поиска элемента. С ними не возникает критических ошибок.

    А давай тогда вообще не будем развивать BAS, всё же и так работает?


    Тему я создал преимущественно для @support 'a, так как проблему уже исправил, но исправления касаются функции из исходников BAS'a.
    Саму проблему расписал понятно, подробно и открыто, чтобы её проще было исправить. Подобных тем я уже очень давно не видел на форуме (за авторством @out и @DrPrime ). Максимум информации об ошибке от форумчан это сам факт ошибки, а все подробности приходится клещами вытаскивать.

  • так же ошибка появляется на таких действиях как:

    1. Проверить существование
    2. Кликнуть на элемент
  • @fox Где я сказал "всё" работает? Я перечислил, что не работает и что важно.

  • Тоже столкнулся с этой ошибкой в действии двигать мышь и кликнуть по элементу.

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

  • Вот у меня в данный момент периодически вылетает с ошибкой по таймауту действие "Проверить Существование". Откуда там таймаут, если оно выполняется мгновенно?
    Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения exist for[documentRoot, css [href="/rating"]]"

  • @lander20 Это новый баг, врятли поправят. Смирись просто.
    Он возникает во много случаях, один из них когда страница еще не начала грузиться. Либо когда приходит ответ от Chromium типо ADRESS_NOT_VALID. На этих страницах тоже таймауты.
    Надо чекать статус loada страницы, он поможет избежать части таких ошибок.

  • @lander20 said in Баг с опцией "Остановить поток, если элемент не найден.":

    Вот у меня в данный момент периодически вылетает с ошибкой по таймауту действие "Проверить Существование". Откуда там таймаут, если оно выполняется мгновенно?
    Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения exist for[documentRoot, css [href="/rating"]]"

    На сколько я помню такая ошибка могла появится при попытке обратится к странице, когда она уже сменилась. Например при использовании пагинации (когда листаешь страницы с почти одинаковым содержимым).
    Можешь попробовать перед действием "Проверить существование" поставить проверку url или ожидание элемента, что бы действие было выполнено именно на целевой странице.

  • @Fox неа, подтверждаю баг. Ожидание элемента не помогает, только ждать загрузки страницы

  • @UserTrue said in Баг с опцией "Остановить поток, если элемент не найден.":

    @Fox неа, подтверждаю баг. Ожидание элемента не помогает, только ждать загрузки страницы

    Это на 24 версии уже? А есть ещё какие нибудь наблюдения и данные, что бы я мог повторить его?

  • @Fox да, я тебе писал кстати про это ) в 23 версии такое в фреймах встречалось. Я потом скину тебе демо проект

  • @UserTrue Там выше я скинул проект.
    Вот еще проект. Тут очень может вылететь и нет
    https://community.bablosoft.com/post/97892

  • 0 Votes
    18 Posts
    1734 Views
  • 0 Votes
    3 Posts
    489 Views
  • 0 Votes
    2 Posts
    409 Views
  • 0 Votes
    7 Posts
    1701 Views
  • 0 Votes
    26 Posts
    5557 Views