여러 동작을 한 번에 요청하면 에이전트가 주고받는 말은 줄어든다. 하지만 내부에서 클릭만 연속으로 보내면 어디서 잘못됐는지 알기 어렵다. 나는 browser.flow에 단계별 새 대상 찾기와 기대 확인, 중단 기록을 유지했다.

묶기 전에 전체 입력의 경계를 확인한다

flow는 시작과 단계 목록을 받고 개수와 대기 시간의 계약을 적용한다. 현재 단계는 1–6개이며 각 대기는 250–15,000밀리초다. 이 한도가 전체 묶음의 실행 시간을 같은 값으로 보장하는 것은 아니다. 현재 단위 시험은 임의 code 필드와 과도한 단계·대기를 거절한다. 작은 묶음을 편하게 실행하는 기능이지 무제한 스크립트를 넣는 입구가 아니다.

선언한 탐색 주소들은 첫 효과 전에 범위와 대상 검사를 거친다. 앞 단계에서 일부 행동을 한 다음 뒤에 금지된 탐색을 발견하는 일을 줄이려는 순서다. 다만 나중에 실제 사이트가 바뀌는 문제까지 이 사전 검사로 없어지지는 않는다. 실행 중에도 현재 상태를 다시 봐야 한다.

각 클릭은 그 시점의 관찰에서 다시 찾는다

click 단계마다 find를 실행해 현재 이름과 역할, 필요한 링크 조건을 대조한다. 잘린 목록이나 중복 대상은 멈춘다. 이전 단계에서 얻은 ref를 목록으로 모아 두고 순서대로 누르지 않는다. 앞 클릭이 문서 구조를 바꿀 수 있기 때문이다.

유일한 대상이라도 비활성·민감 상태이면 거절한다. 그 뒤 기존 clickAndWait로 기대 조건을 확인한다. navigate와 wait 단계도 각자의 기대를 기다린다. 묶음 호출이라는 이유로 일반 Broker의 전달과 결과 검사에서 빠지는 별도 길을 두지 않았다.

완료 단계와 멈춘 단계를 함께 돌려준다

trace에는 단계 번호와 종류, verified 상태와 주소를 남긴다. 오류가 나면 completed와 failedStep, error와 automaticReplay=false를 돌려주는 경로가 있다. 불확실한 전달은 별도 상태를 유지하며 같은 입력을 다시 보내지 않는다.

호출자는 묶음 응답 자체를 받았다는 사실보다 그 status와 완료 목록을 읽어야 한다. 마지막 단계가 빠진 stopped 결과를 정상 전체 완료로 보고하면 안 된다. 상위 작업의 finish 요청과 flow의 부분 실행 상태도 같은 근거가 아니므로 단계 결과와 최종 업무 조건을 직접 대조해야 한다.

전체 재실행과 실패 지점 보완을 나눈다

같은 flow 입력의 지문은 startedFlows에 남아 같은 묶음의 자동 반복을 막는다. 첫 클릭 전에 아무 효과 없이 실패한 좁은 경우와 앞 단계가 끝난 부분 실행을 다르게 다룬다. 완성된 앞 단계를 다시 누르면 이미 생긴 결과를 반복할 수 있다.

현재 구현은 미확정 클릭 뒤 남은 단계 정보를 보관한다. 결과를 읽어 확인했다고 뒤 단계가 모두 저절로 실행됐다고 소개하지 않는다. 어떤 단계까지 실제 verified가 됐는지 다시 읽어야 한다. 이 묶음은 데이터베이스 트랜잭션처럼 앞 행동을 자동으로 되돌리는 기능도 아니다.

검증한 범위의 단위를 바꾸지 않는다

관련 단위 시험은 엄격한 workflow 스키마와 의미 대상, 기대 조건의 동작을 본다. 기존 실제 비교와 연속 작업 시험은 당시 고정한 입력과 완료 조건의 근거다. flow 코드가 있다는 사실과 새 사이트의 전체 업무 완료를 같은 것으로 세지 않는다.

이 글에서는 현재 flow와 선택·기대 코드를 읽고 관련 시험을 대조했다. 실제 업체의 여러 단계를 새로 실행한 보고서는 아니다. 묶음이 주고받는 호출을 줄일 수 있어도 모든 작업의 속도나 모델 비용이 일정 비율 줄었다는 주장은 별도 측정이 필요하다. 단위를 유지해야 비교가 정확해진다.

짧은 요청 뒤에도 자세한 실행 흔적을 남긴다

고객과 에이전트에게는 짧은 입력이 편하다. 반면 제작자에게는 어디서 시작해 어느 단계가 끝났는지 자세한 기록이 필요하다. 나는 바깥 요청의 길이를 줄이면서 안쪽 실행 흔적은 남기는 방향을 택했다.

회사 업무의 자료 가져오기와 승인, 보고서 생성에도 같은 원칙을 적용할 수 있다. 한 번에 처리 버튼을 만들되 단계별 결과와 중단 지점을 설명한다. 묶음의 편의가 검증의 생략이 되지 않아야, 사용자가 실패 뒤 같은 버튼만 반복하지 않고 필요한 다음 확인을 선택할 수 있다.