База знаний
Элемент не найден и остальные строки упавшего шага
Где пишется эта строка
Журнал прогона отводит каждому шагу одну строку: имя шага, его состояние и одну строку подробностей. У упавшего шага в ней и стоит причина.
Законченные прогоны хранятся на диске вместе с последними строками журнала.
Упавший шаг не кончает прогон
Следующий шаг всё равно исполняется, и тот, что за ним, тоже. Прогон доходит до конца сценария и только тогда докладывает.
В конце профиль помечается неудачным и сообщает, сколько его шагов сломалось. Прогон, где есть такой профиль, неудачен целиком.
«Готово» значит сделанные шаги
Строки и что менять
Одно предложение приходит от нескольких разных шагов.
| Строка | Что значит | Что менять |
|---|---|---|
| Окно браузера закрыто. | Вкладки, которую вёл прогон, больше нет. Это проверяется перед каждым шагом. | Ищите шаг, закрывающий вкладку, или окно, закрытое рукой во время прогона. |
| URL не заполнен. | После подстановки переменных пригодного адреса не осталось. | Проверьте переменную, дающую адрес. Открывать можно только веб-адреса и пустую страницу. |
| Не удалось перейти по адресу. | Браузер не загрузил адрес. | Откройте тот же адрес рукой в этом профиле, а потом смотрите на прокси. |
| Элемент не появился вовремя. | Шаг ожидания смотрел снова и снова до своего срока и так и не увидел селектор. | Поднимите срок на шаге или ждите то, что страница показывает раньше. |
| Элемент не найден. | Клик, ввод, прокрутка или извлечение посмотрели один раз и ничего не нашли. | Поставьте перед ними ожидание. Пустой селектор читается так же. |
| Не удалось отправить нажатие клавиши. | Браузер не принял ни передачу фокуса, ни само нажатие. | Сперва щёлкните по полю, а потом нажимайте клавишу. |
| Селектор не заполнен. | У шага условия или перебора после подстановки переменных селектора не оказалось. | Заполните поле селектора или проверьте стоящую там переменную. |
| Шаблон URL не заполнен. | Переход к вкладке по адресу или ожидание запроса, а сверять не с чем. | Впишите в поле совпадения кусок адреса. |
| Код не заполнен. | Тело шага со своим кодом оказалось пустым. | Заполните тело. Переменная, давшая пустоту, опустошает его так же. |
| Подходящий запрос не пришёл вовремя. | Слушать начали вместе с шагом, и до конца срока ничего не совпало. | Поставьте шаг перед тем кликом, который вызывает запрос, а не после него. |
| Cookie не найдена. | Поле имени пустое или на этом сайте нет ничего под таким именем. | Заполните имя и будьте на том сайте, которому cookie принадлежит. |
| В этой вкладке нет открытой страницы. | На шаге нет домена, а во вкладке нет веб-страницы. Очистке всегда нужна вкладка на сайте. | Сперва перейдите на сайт или заполните поле домена у шага. |
| Слишком много снимков экрана за один прогон (предел 100). | Один профиль перешёл предел одного прогона. Снимок внутри повтора считается на каждом проходе. | Вынесите снимок из повтора или разделите сценарий надвое. |
| Вкладка не найдена. | Переход по номеру указал дальше открытых вкладок, переход по адресу не нашёл ни одной подходящей, либо закрываемой вкладки уже не было. | Сверьте номер с тем, сколько вкладок открыто к этому шагу, а кусок адреса с тем, что в них загружено. |
| Не удалось сохранить cookie. | Браузер не принял запись. Та же строка стоит и над удалением, которого он не принял. | Сверьте домен и путь на шаге с настоящей cookie. |
| Новая вкладка недоступна, использована текущая вкладка. | Это не падение. Шаг помечен сделанным, а адрес открылся в уже открытой вкладке. | Ничего, пока следующий шаг не берёт вкладку по номеру: там теперь другая вкладка. |
Когда строка значит не то
Три строки читают неверно чаще прочих, и прямое прочтение ведёт человека править не то поле.
URL не заполнен.
Так же пишется и про имя переменной, которого сценарий не знает: к моменту шага от него не остаётся ничего. И про адрес, открывать который сценарию не дано: сценарий это файл, который люди пересылают друг другу, поэтому проходят только веб-адреса и пустая страница.
Элемент не найден.
У клика, ввода, прокрутки и извлечения нет отдельной жалобы на пустой селектор, поэтому пустой приходит сюда.
Cookie не найдена.
Чтение cookie всегда привязано к сайту во вкладке или к домену на шаге, а не ко всему профилю.
Голое слово вместо предложения
Когда шаг со своим кодом переходит предел времени, он пишет не предложение, а голое слово js_timeout.
Как собрать улики
Прогоните сценарий на одном профиле, чтобы журнал вышел коротким, и прочитайте строку НАД сломанной. Обычно в ней и назван шаг, оставивший страницу не в том виде.
Пишите с экрана поддержки, назвав имя сценария и время. В отчёте, который едет вместе с письмом, названы выбранный движок и выпуск программы.
Чего эта статья не разбирает
- Прогон, не дошедший до первого шага. У запуска своя строка, и ей отведена статья про сценарий, который не начинается.
- Сценарий, отклонённый до начала: в нём нет шагов, не выбраны профили или подписка требует внимания.
- Ошибки, написанные самой страницей. Переводить их не нам, и ни одной из них в таблице выше нет.
- Сборку сценария и выбор селекторов. Это отдельный предмет статьи про сборку сценария.
Где это решается
Каждое утверждение выше это место в коде, а стенд назван там, где он есть.
- Сломанный шаг идёт в итог, и прогон, где сломались все шаги, не докладывается готовым
- apps/desktop/test/run-result-honest.js
- Законченный прогон лежит на диске и читается обратно при запуске
- apps/desktop/test/run-log-survives-restart.js
- Сценарий можно послать только по веб-адресу, и проверка повторяется в момент самого шага
- apps/desktop/test/rpa-reach.js
- Каждая строка таблицы это запись словаря с переводом на каждый язык программы
- apps/desktop/src/i18n/messages.js
- Условие за каждой строкой, по одному на вид шага
- apps/desktop/src/main/main.js
Вопросы
- Сломанный шаг останавливает сценарий?
- Нет. Следующий шаг исполняется, и сценарий доходит до конца. В итоге потом названо, сколько шагов сломалось.
- Есть ли номер ошибки, чтобы назвать его поддержке?
- Нет. Каждая строка таблицы это предложение, переведённое на любой язык программы, и называть её надо так, как видите её.
- Может ли один шаг подвесить прогон навсегда?
- У шагов ожидания и у шага со своим кодом есть собственный предел времени. Когда он вышел, прогон пишет строку и идёт дальше.
- Почему шаг вкладки помечен сделанным и всё же напечатал строку?
- Одна строка таблицы это предупреждение, а не падение: новую вкладку открыть не вышло, и адрес загрузился в уже открытой.
Так и не вышло
Поддержка читает отчёт, который едет вместе с письмом, и отвечает причиной, а не списком советов.