Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
WebDriver는 사용자 에이전트의 내부 상태 검사와 제어를 가능하게 하는 원격 제어 인터페이스이다. 이는 별도 프로세스 프로그램이 웹 브라우저의 동작을 원격으로 지시할 수 있는 방법으로, 플랫폼 및 언어 중립적인 와이어 프로토콜을 제공한다.
웹 문서의 DOM 요소를 발견하고 조작하며 사용자 에이전트의 동작을 제어하기 위한 인터페이스 집합이 제공된다. 이는 주로 웹 작성자가 별도의 제어 프로세스에서 사용자 에이전트를 자동화하는 테스트를 작성할 수 있도록 하기 위한 것이지만, 브라우저 내 스크립트가 — 별도일 수도 있는 — 브라우저를 제어할 수 있게 하는 방식으로도 사용될 수 있다.
이 절은 이 문서가 발행된 시점의 상태를 설명한다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 찾을 수 있다.
이 문서는 Browser Testing and Tools Working Group이 Recommendation 트랙을 사용하여 Working Draft로 발행했다.
Working Draft로 발행되었다는 사실이 W3C와 그 회원들의 승인을 의미하지는 않는다.
이 문서는 초안 문서이며 언제든지 다른 문서로 갱신, 대체 또는 폐기될 수 있다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 적절하지 않다.
이 문서는 W3C Patent Policy에 따라 운영되는 그룹에 의해 작성되었다. W3C는 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지하며, 해당 페이지에는 특허 공개 지침도 포함되어 있다. 자신이 실제로 알고 있는 특허가 Essential Claim(s)을 포함한다고 믿는 개인은 W3C Patent Policy의 6절에 따라 그 정보를 공개해야 한다.
이 문서는 2025년 8월 18일 W3C Process Document의 적용을 받는다.
이 절은 비규범적이다.
WebDriver 표준은 여러 설계 목표를 따르고자 한다.
이 명세는 널리 사용되는 Selenium WebDriver 브라우저 자동화 프레임워크에서 파생되었다. Selenium은 오래 지속되어 온 프로젝트이며, 그 역사와 폭넓은 사용 범위로 인해 기대되는 기능의 범위가 매우 넓다. 이 명세는 이러한 기대를 설계에 반영한다. 개선이나 명확화가 이루어진 경우, 기존 Selenium WebDriver 사용자가 예상치 못한 파손을 피할 수 있도록 주의 깊게 이루어졌다.
이 명세의 가장 큰 의도된 사용자 집단은 브라우저 자동화에 의존하는 모니터링이나 부하 테스트 같은 자동화 테스트 및 기타 도구를 작성하는 소프트웨어 개발자와 테스터이다. 따라서 요소에 입력하기 및 요소를 클릭하기 같은 일반적인 작업을 단순화하는 명령을 제공하도록 주의를 기울였다.
WebDriver는 완전히 ECMAScript로 구현할 수 없는 기능을 자동화하기 위한 목적으로, 다른 이들이 프로토콜 확장을 정의할 수 있는 메커니즘을 제공한다. 이를 통해 다른 웹 표준은 새로운 플랫폼 기능의 자동화를 지원할 수 있다. 또한 공급업체가 자사 브라우저에 특화된 기능을 노출할 수 있게 한다.
비규범으로 표시된 절뿐 아니라, 이 명세의 모든 작성 지침, 다이어그램, 예제 및 참고는 비규범적이다. 이 명세의 그 밖의 모든 것은 규범적이다.
알고리즘이나 특정 단계로 표현된 적합성 요구사항은 최종 결과가 동등하기만 하다면 어떤 방식으로든 구현될 수 있다. 이 문서의 알고리즘은 일반적으로 성능보다는 가독성을 염두에 두고 작성되어 있다.
식에서 모든 숫자는 정수이고, 덧셈은 “+”로, 뺄셈은 “−”로, 나눗셈은 “÷”로, 비트 단위 OR은 “|”로 나타낸다. 문자 “(”와 “)”는 이러한 문맥에서 논리적 그룹화를 제공하는 데 사용된다.
수학 함수 min(value, value[, value]) 은 둘 이상의 값 중 가장 작은 항목을 반환한다. 반대로, 함수 max(value, value[, value]) 는 둘 이상의 값 중 가장 큰 항목을 반환한다.
수학 함수 floor(value) 는 양의 무한대에 가장 가까운 정수 중 value보다 크지 않은 가장 큰 정수를 산출한다.
Universally Unique Identifier (UUID)는 중앙 등록 절차가 필요 없는 128비트 길이의 URN이다. UUID 생성은 진정한 난수 또는 의사 난수로 UUID 만들기를 의미하며, 이를 문자열 표현으로 변환하는 것을 뜻한다. [RFC4122]
Unix Epoch는 The Open Group Base Specifications Issue 7 4.15절 (IEEE Std 1003.1)에 설명된 것처럼, Epoch 이후 경과한 초 수를 근사하는 값이다.
정수는 Number로서, ToInteger 연산을 거쳐도 변경되지 않는 값이다.
ECMAScript 속성의 초기값은 해당 속성에 대해 플랫폼이 정의한 값, 즉 콘텐츠 스크립트에 의한 섀도잉이 없을 때 그 속성이 가질 값이다.
브라우저 chrome은 비규범적 용어로, 사용자가 사용자 에이전트 자체와 상호작용하는 데 쓰이는 표현을 가리키며, 접근된 웹 콘텐츠와 구별된다. 브라우저 chrome 요소의 예에는 북마크 도구 모음 같은 도구 모음, 파일 메뉴나 컨텍스트 메뉴 같은 메뉴, 뒤로 및 앞으로 버튼 같은 버튼, 보안 및 인증서 표시기 같은 도어 행어, 운영 체제 위젯 테두리 같은 장식이 포함되지만, 이에 한정되지는 않는다.
webdriver-active 플래그는 사용자 에이전트가 원격 제어 중일 때 true로 설정된다. 초기값은 false이다.
WebIDL
Navigator includes NavigatorAutomationInformation;
NavigatorAutomationInformation
인터페이스는
WorkerNavigator에
노출되어서는 안 된다.
webdriver-active 플래그가 설정되어 있으면 true를, 그렇지 않으면 false를 반환한다.
WebDriver 프로토콜은 다음 사이의 통신으로 구성된다.
로컬 엔드는 프로토콜의 클라이언트 측을 나타내며, 일반적으로 WebDriver 프로토콜 위에 API를 제공하는 언어별 라이브러리 형태이다. 이 명세는 와이어 프로토콜 수준 위의 그러한 라이브러리 세부 사항에 어떠한 제한도 두지 않는다.
원격 엔드에 대해 표준은 노드 유형이라고 알려진 두 가지 넓은 적합성 클래스를 정의한다.
모든 원격 엔드 노드 유형은 로컬 엔드의 관점에서 원격 엔드와 블랙박스 방식으로 구별할 수 없어야 하며, 따라서 와이어 프로토콜 측면에서 원격 엔드에 대한 요구사항을 따른다.
원격 엔드의 준비 상태는 새 연결을 수락할 수 있는지 여부를 나타낸다. 구현이 엔드포인트 노드이고 활성 HTTP 세션 목록이 비어 있지 않은 경우, 또는 그 밖에 원격 엔드가 새 세션 생성을 시도하면 실패할 것으로 알려진 상태에 있는 경우에는 false여야 한다. 그 밖의 모든 경우에는 true여야 한다.
중개 노드가 여러 엔드포인트 노드를 관리하는 멀티플렉서인 경우, 이는 예를 들어 최대 용량에 도달했을 때 더 많은 세션을 제공할 수 있는 능력을 나타낼 수도 있다.
WebDriver 원격 엔드는 엔드포인트가 서로 다른 명령에 매핑되는 HTTP 준수 와이어 프로토콜을 제공해야 한다.
이 표준은 원격 엔드 프로토콜만 정의하므로, 로컬 엔드가 어떻게 구현되어야 하는지에 대해서는 어떠한 요구사항도 두지 않는다. 로컬 엔드는 원격 엔드의 프로토콜로 통신할 수 있는 범위에서만 호환될 것으로 기대된다. 노출되는 사용자 대면 API에 대해서는 어떠한 요구사항도 없다.
이 명세의 여러 부분은 단계별 알고리즘의 관점에서 작성되어 있다. 이러한 알고리즘의 세부 사항은 어떠한 규범적 의미도 갖지 않는다. 구현은 명세와 동등한 출력을 산출하는 한 어떤 구현 전략도 자유롭게 채택할 수 있다. 특히 이 문서의 알고리즘은 성능보다 가독성에 최적화되어 있다.
값을 반환하는 알고리즘이 실패할 수 있는 경우, 이들은 성공 또는 오류를 반환하는 방식으로 작성된다. 성공 값에는 반환된 값을 캡슐화하는 연관된 data 필드가 있고, 반면 오류 값에는 연관된 오류 코드가 있다.
실패할 수 있는 알고리즘을 호출할 때, “Let result be the result of trying to call algorithm”라는 구문은 다음과 동등하다.
temp를 algorithm 호출의 결과로 둔다.
temp가 오류이면 temp를 반환하고, 그렇지 않으면 result를 temp의 data 필드로 둔다.
object에서 name으로 속성을 가져오기의 결과는 object에 대해 Object.[[GetOwnProperty]](name)를 호출한 결과와 동일한 것으로 정의된다.
object에서
인수 name 및 default로
기본값과 함께 속성을 가져오기의 결과는,
object에 대해
Object.[[GetOwnProperty]](name)를 호출한 결과가
undefined가 아닌 값이면 그 결과와 같고,
그렇지 않으면 default와 같은 것으로 정의된다.
object에 대해 인수 name 및 value로 속성 설정은 object에 대해 Object.[[Put]](name, value)를 호출하는 것과 동일한 것으로 정의된다.
JSON Object 타입의 object로 수행하는 JSON 직렬화의 결과는 stringify(object)를 호출한 결과로 정의된다.
text로 수행하는 JSON 역직렬화의 결과는 parse(text)를 호출한 결과로 정의된다.
WebDriver 프로토콜은 명령으로 구성된다. 이 명세에서 정의한 메서드와 템플릿을 가진 각각의 HTTP 요청은 단일 명령을 나타내며, 따라서 각 명령은 단일 HTTP 응답을 생성한다.
명령에 응답하여, 원격 엔드는 원격 엔드 단계라고 알려진 일련의 동작을 실행한다. 이는 원격 엔드가 특정 명령을 받았을 때 수행하는 동작의 순서를 제공한다.
원격 엔드는 클라이언트에서 요청을 읽고 응답을 쓰는 HTTP 서버이며, 일반적으로 TCP 소켓을 통해 동작한다. 이 명세의 목적상, 특정 로컬 엔드와 원격 엔드 사이의 데이터 전송은 연결로 모델링하며, 이 연결에 대해 원격 엔드는 바이트 쓰기 및 바이트 읽기를 할 수 있다. 그러나 이 연결이 정확히 어떻게 동작하고 어떻게 설정되는지는 범위 밖이다.
연결이 설정된 후, 원격 엔드는 다음 단계를 실행해야 한다.
데이터에서 완전한 HTTP 요청을 구성할 수 있을 때까지 연결에서 바이트를 읽는다. [RFC7230]의 요구사항에 따라, 수신한 데이터에서 구성된 요청을 request로 둔다. 완전한 HTTP 요청을 구성할 수 없는 경우, 원격 엔드는 연결을 닫거나, 상태 코드 500의 HTTP 응답을 반환하거나, 오류 코드 unknown error를 가진 오류를 반환해야 한다.
request의 method 및 URL을 인수로 하여 요청을 매칭하는 알고리즘의 결과를 request match로 둔다.
request match가 오류 타입이면, request match의 오류 코드로 오류를 보내고 continue한다.
그렇지 않으면 command와 URL variables를 request match의 데이터로 둔다.
session을 null로 둔다.
URL variables가 "session id"를
contains하는 경우:
이 조건은 특정 세션에서 동작하지 않는 New Session 및 Status 명령과 모든 확장 명령을 제외하려는 것이다.
원격 엔드의 요청 큐에 태스크를 큐잉하여 다음 단계를 실행한다.
parameters를 null로 둔다.
request의 method가 POST이면:
request의 body를 인수로 하여 JSON으로 파싱한 결과를 parse result로 둔다. 이 과정이 예외를 던지면, 오류 코드 invalid argument를 가진 오류를 반환하고 이 전체 알고리즘의 1단계로 되돌아간다.
parse result가 Object가 아니면, 오류 코드 invalid argument로 오류를 보내고 이 전체 알고리즘의 1단계로 되돌아간다.
그렇지 않으면 parameters를 parse result로 둔다.
session으로 탐색 완료 대기를 수행한 결과를 navigate result로 둔다.
navigate result가 오류이면, navigate result의 오류 코드와 같은 오류 코드로 오류를 보내고 반환한다.
command에 대해 session, URL variables 및 parameters로 원격 엔드 단계를 실행하여 얻은 반환값을 response result로 둔다.
response result가 오류이면, response result의 오류 코드와 같은 오류 코드로 오류를 보내고 반환한다.
Assert: response result는 성공이다.
response data를 response result의 data로 둔다.
상태 200 및 response data로 응답을 보낸다.
error code와 선택적인 error data 딕셔너리로 오류 보내기가 요구될 때, 원격 엔드는 다음 단계를 실행해야 한다.
status와 name을 error code에 대한 오류 응답 데이터로 둔다.
message를 오류의 이유에 대한 사람이 읽을 수 있는 설명을 포함하는 구현 정의 문자열로 둔다.
stacktrace를 오류가 발생한 시점의 활성 스택 프레임에 대한 스택 추적 보고서를 포함하는 구현 정의 문자열로 둔다.
다음 속성으로 초기화된 새 JSON Object를 body로 둔다.
error"
message"
stacktrace"
오류 데이터 딕셔너리에 항목이 있으면,
딕셔너리로 채워진 새 JSON Object를
body의 "data" 필드로 설정한다.
status와 body를 인수로 하여 응답을 보낸다.
인수 status 및 data로 응답 보내기가 요구될 때, 원격 엔드는 다음 단계를 실행해야 한다.
response를 새 응답으로 둔다.
response의 HTTP 상태를 status로 설정하고, 상태 메시지를 상태 코드 레지스트리에서 status의 설명에 대응하는 문자열로 설정한다.
다음 값으로 response의 헤더에 name과 value를 설정한다.
Content-Type
application/json; charset=utf-8"
Cache-Control
no-cache"
response의 body를
키 "value"가 data로 설정된 JSON Object의
JSON
직렬화를 UTF-8 인코딩한 것으로 둔다.
response를 [RFC7230]의 규칙에 따라 직렬화하여 나온 바이트 시퀀스를 response bytes로 둔다.
요청 라우팅은 HTTP 요청에서 해당 요청이 나타내는 명령을 구현하는 데 필요한 일련의 단계로 넘어가는 과정이다.
원격 엔드에는 연관된 URL 접두사가 있으며, 이는 그 원격 엔드에서 WebDriver가 정의한 모든 URL의 접두사로 사용된다. 이는 undefined이거나 path-absolute URL이어야 한다.
method 및 URL이 주어졌을 때 요청을 매칭하기 위해, 다음 단계를 수행해야 한다.
엔드포인트 표의 각 행을 포함하는 목록을 endpoints로 둔다.
URL 접두사와 항목의 URI 템플릿을 연결한 것이 URL의 path와 같은 유효한 확장을 갖지 않는 각 항목을 endpoints에서 제거한다.
endpoints에 항목이 없으면, 오류 코드 unknown command를 가진 오류를 반환한다.
method 열이 method와 같지 않은 각 항목을 endpoints에서 제거한다.
endpoints에 항목이 없으면, 오류 코드 unknown method를 가진 오류를 반환한다.
이제 endpoints에는 정확히 하나의 항목이 있다. 이 항목을 entry로 둔다.
URL 접두사와 entry의 URI template을 연결한 것을 URI template로 둔다.
entry의 명령을 command로 둔다.
URI template에 정의된 각 변수마다 하나의 entry를 갖는 map을 URL variables로 둔다. 여기서 항목 이름은 템플릿 변수 이름과 같고, 항목 값은 URI template을 URL의 path와 일치하도록 확장하는 데 필요한 변수 값이다.
command와 URL variables를 데이터로 하여 성공을 반환한다.
다음 엔드포인트 표는 각 엔드포인트 노드 명령에 대한 메서드와 URI 템플릿을 나열한다. 확장 명령은 이 표에 암묵적으로 추가된다.
| 메서드 | URI 템플릿 | 명령 |
|---|---|---|
| POST | /session | 새 세션 |
| DELETE | /session/{session id} | 세션 삭제 |
| GET | /status | 상태 |
| GET | /session/{session id}/timeouts | 시간 제한 가져오기 |
| POST | /session/{session id}/timeouts | 시간 제한 설정 |
| POST | /session/{session id}/url | 이동 |
| GET | /session/{session id}/url | 현재 URL 가져오기 |
| POST | /session/{session id}/back | 뒤로 |
| POST | /session/{session id}/forward | 앞으로 |
| POST | /session/{session id}/refresh | 새로고침 |
| GET | /session/{session id}/title | 제목 가져오기 |
| GET | /session/{session id}/window | 창 핸들 가져오기 |
| DELETE | /session/{session id}/window | 창 닫기 |
| POST | /session/{session id}/window | 창으로 전환 |
| GET | /session/{session id}/window/handles | 창 핸들 가져오기 |
| POST | /session/{session id}/window/new | 새 창 |
| POST | /session/{session id}/frame | 프레임으로 전환 |
| POST | /session/{session id}/frame/parent | 부모 프레임으로 전환 |
| GET | /session/{session id}/window/rect | 창 사각형 가져오기 |
| POST | /session/{session id}/window/rect | 창 사각형 설정 |
| POST | /session/{session id}/window/maximize | 창 최대화 |
| POST | /session/{session id}/window/minimize | 창 최소화 |
| POST | /session/{session id}/window/fullscreen | 창 전체 화면 |
| GET | /session/{session id}/element/active | 활성 요소 가져오기 |
| GET | /session/{session id}/element/{element id}/shadow | 요소 섀도 루트 가져오기 |
| POST | /session/{session id}/element | 요소 찾기 |
| POST | /session/{session id}/elements | 요소들 찾기 |
| POST | /session/{session id}/element/{element id}/element | 요소에서 요소 찾기 |
| POST | /session/{session id}/element/{element id}/elements | 요소에서 요소들 찾기 |
| POST | /session/{session id}/shadow/{shadow id}/element | 섀도 루트에서 요소 찾기 |
| POST | /session/{session id}/shadow/{shadow id}/elements | 섀도 루트에서 요소들 찾기 |
| GET | /session/{session id}/element/{element id}/selected | 요소가 선택되었는지 여부 |
| GET | /session/{session id}/element/{element id}/attribute/{name} | 요소 속성 가져오기 |
| GET | /session/{session id}/element/{element id}/property/{name} | 요소 프로퍼티 가져오기 |
| GET | /session/{session id}/element/{element id}/css/{property name} | 요소 CSS 값 가져오기 |
| GET | /session/{session id}/element/{element id}/text | 요소 텍스트 가져오기 |
| GET | /session/{session id}/element/{element id}/name | 요소 태그 이름 가져오기 |
| GET | /session/{session id}/element/{element id}/rect | 요소 사각형 가져오기 |
| GET | /session/{session id}/element/{element id}/enabled | 요소가 활성화되었는지 여부 |
| GET | /session/{session id}/element/{element id}/computedrole | 계산된 역할 가져오기 |
| GET | /session/{session id}/element/{element id}/computedlabel | 계산된 레이블 가져오기 |
| POST | /session/{session id}/element/{element id}/click | 요소 클릭 |
| POST | /session/{session id}/element/{element id}/clear | 요소 지우기 |
| POST | /session/{session id}/element/{element id}/value | 요소 키 전송 |
| GET | /session/{session id}/source | 페이지 소스 가져오기 |
| POST | /session/{session id}/execute/sync | 스크립트 실행 |
| POST | /session/{session id}/execute/async | 비동기 스크립트 실행 |
| GET | /session/{session id}/cookie | 모든 쿠키 가져오기 |
| GET | /session/{session id}/cookie/{name} | 이름 있는 쿠키 가져오기 |
| POST | /session/{session id}/cookie | 쿠키 추가 |
| DELETE | /session/{session id}/cookie/{name} | 쿠키 삭제 |
| DELETE | /session/{session id}/cookie | 모든 쿠키 삭제 |
| POST | /session/{session id}/actions | 동작 수행 |
| DELETE | /session/{session id}/actions | 동작 해제 |
| POST | /session/{session id}/alert/dismiss | 알림 닫기 |
| POST | /session/{session id}/alert/accept | 알림 수락 |
| GET | /session/{session id}/alert/text | 알림 텍스트 가져오기 |
| POST | /session/{session id}/alert/text | 알림 텍스트 전송 |
| GET | /session/{session id}/screenshot | 스크린샷 촬영 |
| GET | /session/{session id}/element/{element id}/screenshot | 요소 스크린샷 촬영 |
| POST | /session/{session id}/print | 페이지 인쇄 |
오류는
WebDriver 프로토콜에서 4xx 또는 5xx 범위의
HTTP
상태를 가진
HTTP 응답과,
오류의 세부 정보를
포함하는 JSON 본문으로 표현된다.
본문은 JSON Object이며
"value"라는 이름의 필드를 갖고,
그 값은 세 개, 때로는 네 개의 필드를 지닌 객체이다.
error"는 오류 코드를
나타내는 문자열을 포함한다.
message"는 발생한 오류 종류에 대한 사람이 읽을 수 있는 설명을 담은
구현 정의 문자열을 포함한다.
stacktrace"는 오류가 발생한 시점의 활성 스택 프레임에 대한
스택 추적 보고서를 담은 구현 정의 문자열을 포함한다.
data"는 오류 진단에 도움이 되는 추가
오류
데이터를 가진 JSON Object이다.
다음 표는 각 오류 코드,
그에 연관된 HTTP 상태,
JSON error 코드,
그리고 오류에 대한 비규범적 설명을 나열한다.
특정 오류
코드에 대한
오류
응답 데이터는
해당 오류
코드에 대응하는 행의
HTTP Status 및 JSON Error Code 열의 값이다.
| 오류 코드 | HTTP 상태 | JSON 오류 코드 | 설명 |
|---|---|---|---|
| element click intercepted | 400 | element click intercepted
|
이벤트를 받는 요소가 클릭이 요청된 요소를 가리고 있기 때문에 요소 클릭 명령을 완료할 수 없었다. |
| element not interactable | 400 | element not interactable
|
요소가 포인터 또는 키보드 상호작용 가능 상태가 아니기 때문에 명령을 완료할 수 없었다. |
| insecure certificate | 400 | insecure certificate
|
탐색으로 인해 사용자 에이전트가 인증서 경고에 도달했으며, 이는 일반적으로 만료되었거나 유효하지 않은 TLS 인증서의 결과이다. |
| invalid argument | 400 | invalid argument
|
명령에 전달된 인수가 유효하지 않거나 잘못된 형식이다. |
| invalid cookie domain | 400 | invalid cookie domain
|
현재 페이지와 다른 도메인 아래에 쿠키를 설정하려는 잘못된 시도가 이루어졌다. |
| invalid element state | 400 | invalid element state
|
요소가 유효하지 않은 상태에 있기 때문에 명령을 완료할 수 없었다. 예를 들어 편집 가능하고 재설정 가능하지 않은 요소를 지우기하려는 경우이다. |
| invalid selector | 400 | invalid selector
|
인수가 유효하지 않은 선택자였다. |
| invalid session id | 404 | invalid session id
|
주어진 세션 ID가 활성 세션 목록에 없을 때 발생하며, 이는 세션이 존재하지 않거나 활성 상태가 아님을 의미한다. |
| javascript error | 500 | javascript error
|
사용자가 제공한 JavaScript를 실행하는 동안 오류가 발생했다. |
| move target out of bounds | 500 | move target out of bounds
|
마우스 상호작용의 대상이 브라우저의 뷰포트 안에 없으며 그 뷰포트 안으로 가져올 수 없다. |
| no such alert | 404 | no such alert
|
열린 모달 대화상자가 없을 때 모달 대화상자에 대해 작업을 시도했다. |
| no such cookie | 404 | no such cookie
|
session의 현재 브라우징 컨텍스트의 활성 문서의 연관된 쿠키들 중에서 주어진 경로 이름과 일치하는 쿠키를 찾을 수 없었다. |
| no such element | 404 | no such element
|
주어진 검색 매개변수를 사용하여 페이지에서 요소를 찾을 수 없었다. |
| no such frame | 404 | no such frame
|
프레임을 찾을 수 없었기 때문에 프레임으로 전환하는 명령을 만족할 수 없었다. |
| no such window | 404 | no such window
|
창을 찾을 수 없었기 때문에 창으로 전환하는 명령을 만족할 수 없었다. |
| no such shadow root | 404 | no such shadow root
|
요소에 섀도 루트가 없다. |
| script timeout error | 500 | script timeout
|
스크립트가 시간 제한이 만료되기 전에 완료되지 않았다. |
| session not created | 500 | session not created
|
새 세션을 만들 수 없었다. |
| stale element reference | 404 | stale element reference
|
참조된 요소가 더 이상 DOM에 연결되어 있지 않기 때문에 명령이 실패했다. |
| detached shadow root | 404 | detached shadow root
|
참조된 섀도 루트가 더 이상 DOM에 연결되어 있지 않기 때문에 명령이 실패했다. |
| timeout | 500 | timeout
|
작업이 시간 제한이 만료되기 전에 완료되지 않았다. |
| unable to set cookie | 500 | unable to set cookie
|
쿠키 값을 설정하는 명령을 만족할 수 없었다. |
| unable to capture screen | 500 | unable to capture screen
|
화면 캡처가 불가능했다. |
| unexpected alert open | 500 | unexpected alert open
|
모달 대화상자가 열려 있어 이 작업을 차단했다. |
| unknown command | 404 | unknown command
|
원격 엔드가 해당 명령을 알지 못하기 때문에 명령을 실행할 수 없었다. |
| unknown error | 500 | unknown error
|
명령을 처리하는 동안 원격 엔드에서 알 수 없는 오류가 발생했다. |
| unknown method | 405 | unknown method
|
요청된 명령이 알려진 URL과 일치했지만, 해당 URL에 대한 어떤 메서드와도 일치하지 않았다. |
| unsupported operation | 500 | unsupported operation
|
제대로 실행되어야 하는 명령을 어떤 이유로 지원할 수 없음을 나타낸다. |
오류 데이터 딕셔너리는 문자열 키에서 JSON 직렬화 가능한 값으로의 매핑이며, 선택적으로 오류 객체에 포함될 수 있다.
이 절에서 정의한 용어를 사용하여, 다른 이들은 표준 프로토콜과 매끄럽게 통합되는 추가 명령을 정의할 수 있다. 이를 통해 공급업체는 자신의 사용자 에이전트에 특화된 기능을 노출할 수 있으며, 다른 웹 표준도 새로운 플랫폼 기능을 자동화하기 위한 명령을 정의할 수 있다.
이 방식으로 정의된 명령은 확장 명령이라고 하며, 다른 명령과 다르게 동작하지 않는다. 각각은 전용 HTTP 엔드포인트와 원격 엔드 단계 집합을 갖는다.
각 확장 명령에는 URI Template 문자열인 연관된 확장 명령 URI 템플릿이 있으며, 이는 명령이 수행하는 작업과 어느 정도 유사성을 가져야 한다. 이 값은 HTTP 메서드 및 확장 명령과 함께 엔드포인트 표에 추가되며, 따라서 다른 내장 명령과 같은 요청 라우팅 규칙을 따른다.
다른 구현과의 잠재적인 리소스 충돌을 피하기 위해, 공급업체별 확장 명령 URI 템플릿은 공급업체와 UA를 고유하게 식별하는 하나 이상의 경로 세그먼트로 시작해야 한다. 공급업체는 [CSS21]에 설명된 것처럼 추가 문자 없이 공급업체 접두사를 사용하는 것이 제안된다. 특히 공급업체 키워드에 관한 4.1.2.2절에서 설명된 대로, 이를 이 경로 요소의 이름으로 사용하고, 공급업체가 선택한 UA 식별자를 포함하는 것이 제안된다.
다른 명세는 추가 WebDriver 기능을 정의할 수 있다.
정의된 각 기능에는
":"(콜론) 문자를 포함하지 않는 문자열인
기능 이름과,
JSON 타입을 갖는 단일 인수 value를 받아
역직렬화된 기능 값을 감싼 성공 또는
오류를
반환하는 단계 집합인
추가 기능 역직렬화
알고리즘이 있어야 한다.
추가 WebDriver 기능은
현재 구현이 기능과 매칭되는지 결정하고 사용자에게 반환할 계산된 값을 제공하는 데 사용되는
단계 집합인
매칭된 기능 직렬화 알고리즘도
정의할 수 있다. 이 단계 집합은 단일 인수 value를 받는데,
이는 대응하는 추가
기능 역직렬화 알고리즘의 출력이며,
기능이 매칭되지 않음을 나타내기 위해 null을 반환하거나,
기능이 매칭되면 null이 아닌 JSON 직렬화 가능한 값을 반환한다.
다른 명세는 WebDriver 새 세션 알고리즘도 정의할 수 있다. 이는 새 세션이 생성된 직후, 그리고 새 세션 응답이 원격 엔드로 전송되기 전에 호출된다. 이러한 알고리즘은 설정될 WebDriver 세션을 나타내는 session과, 원격 엔드로 반환될 기능 객체인 capabilities를 인수로 호출된다. 그러한 알고리즘은 동일한 명세에서 정의한 추가 WebDriver 기능인 이름을 가진 기능 객체의 어떤 항목이든 수정할 수 있다.
원격
엔드는
구성 제공 또는 기타 공급업체별 요구 충족에 사용되는
추가 기능인
확장 기능도 도입할 수 있다.
확장 기능의 키는 구현별 네임스페이스를 나타내는
":"(콜론) 문자를 포함해야 한다.
값은 임의의 JSON 타입일 수 있다.
확장 명령과 마찬가지로,
확장 기능 네임스페이스를 나타내는 데 사용되는 키는
[CSS21]에
나열된 공급업체 키워드를
기반으로 하며, 문자열에서 첫 번째 ":" 문자 앞에 오는 것이 제안된다.
WebDriver capabilities는 주어진 구현이 지원하는 기능을 전달하는 데 사용된다. 로컬 엔드는 새 세션을 생성할 때 원격 엔드가 충족해야 하는 기능을 정의하기 위해 capabilities를 사용할 수 있다. 마찬가지로, 원격 엔드는 세션의 전체 기능 집합을 설명하기 위해 capabilities를 사용한다.
다음 표준 기능 표는 각 구현이 지원해야 하는 기능을 열거한다. 구현은 추가 확장 기능을 정의할 수 있다.
| 기능 | 키 | 값 타입 | 설명 |
|---|---|---|---|
| 브라우저 이름 | "browserName"
|
string | 사용자 에이전트를 식별한다. |
| 브라우저 버전 | "browserVersion"
|
string | 사용자 에이전트의 버전을 식별한다. |
| 플랫폼 이름 | "platformName"
|
string | 엔드포인트 노드의 운영 체제를 식별한다. |
| 안전하지 않은 TLS 인증서 허용 | "acceptInsecureCerts"
|
boolean | 세션이 지속되는 동안 내비게이션 시 신뢰할 수 없는 TLS 인증서와 자체 서명 TLS 인증서를 암묵적으로 신뢰할지 여부를 나타낸다. |
| 페이지 로드 전략 | "pageLoadStrategy"
|
string | 세션의 페이지 로드 전략을 정의한다. |
| 프록시 구성 | "proxy"
|
JSON Object | 세션의 프록시 구성을 정의한다. |
| 창 크기 조정/위치 지정 | "setWindowRect"
|
boolean | 원격 엔드가 모든 크기 조정 및 위치 재지정 명령을 지원하는지 여부를 나타낸다. |
| 세션 타임아웃 | "timeouts"
|
JSON Object | 특정 세션 작업에 부과되는 타임아웃을 설명한다. |
| 엄격한 파일 상호작용 가능성 | "strictFileInteractability"
|
boolean | 세션의 엄격한 파일 상호작용 가능성을 정의한다. |
| 처리되지 않은 프롬프트 동작 | "unhandledPromptBehavior"
|
string | 세션의 사용자 프롬프트
처리기를 설명한다.
기본값은 "dismiss and notify"이다.
|
| User Agent | "userAgent"
|
string | 엔드포인트 노드의 기본 User-Agent 값을 식별한다. |
프록시 구성 기능은 기본 기능 안에 중첩된 JSON Object이다. 구현은 추가 프록시 구성 옵션을 정의할 수 있지만, 아래 나열된 것들의 의미론을 변경해서는 안 된다.
| 키 | 값 타입 | 설명 | 유효한 값 |
|---|---|---|---|
proxyType
|
string | 프록시 구성의 타입을 나타낸다. | "pac",
"direct",
"autodetect",
"system",
또는 "manual".
|
proxyAutoconfigUrl
|
string | 이
"pac"와 같을 때
프록시
자동 구성 파일의 URL을 정의한다.
|
임의의 URL. |
httpProxy
|
string | 이
"manual"일 때
HTTP 트래픽에 대한 프록시 host를 정의한다.
|
"http" scheme에 대한
host 및 선택적 port.
|
noProxy
|
array | 이
"manual"일 때
프록시를 우회해야 하는 주소를 나열한다.
|
임의 개수의 String을 포함하는 List. |
sslProxy
|
string | 이
"manual"일 때
암호화된 TLS 트래픽에 대한 프록시 host를 정의한다.
|
"https" scheme에 대한
host 및 선택적 port.
|
socksProxy
|
string | 이
"manual"일 때
SOCKS 프록시에 대한
프록시 host를 정의한다.
|
undefined scheme을 가진 host 및 선택적 port. |
socksVersion
|
number | 이
"manual"일 때
SOCKS 프록시 버전을 정의한다.
|
0 이상 255 이하의 임의의 정수. |
scheme에 대한 host 및 선택적 port는 유효한 host로 정의되며, 선택적으로 콜론과 유효한 port가 뒤따를 수 있다. host는 자격 증명을 포함할 수 있다. port가 생략되고 scheme에 기본 port가 있으면, 이것이 암시된 port이다. 그렇지 않으면 port는 정의되지 않은 채로 둔다.
"direct"인 은
브라우저가 프록시를 전혀 사용해서는 안 됨을 나타낸다.
proxyType
"system"인 은
브라우저가 기반 운영 체제에 구성된 다양한 프록시를 사용해야 함을 나타낸다.
proxyType
"autodetect"인 은 사용할 프록시가
구현별 방식으로 감지되어야 함을 나타낸다.
proxyType
인수 parameter를 프록시로 역직렬화하는 원격 엔드 단계는 다음과 같다.
parameter가 JSON Object가 아니면 오류 코드 invalid argument를 가진 오류를 반환한다.
proxy를 새 빈 프록시 구성 객체로 둔다.
parameter의 각 열거 가능한 own property에 대해 다음 하위 단계를 실행한다.
key를 속성의 이름으로 둔다.
value를 parameter에서 name이라는 이름의 속성을 가져온 결과로 둔다.
프록시 구성 표에
key에 대응하는 key가 없으면, 오류를
오류 코드 invalid
argument와 함께 반환한다.
value가 해당 key에 대한
valid values 중 하나가 아니면,
오류
코드 invalid argument를 가진
오류를 반환한다.
proxy에 대해 key 속성을 value로 설정한다.
proxy가 "proxyType"에 대한
own property를 갖지 않으면,
오류
코드 invalid argument를 가진
오류를
반환한다.
proxy에서 "proxyType"이라는 이름의
속성을 가져온 결과가
"pac"와 같고, proxy가
"proxyAutoconfigUrl"에 대한
own property를 갖지 않으면,
오류 코드 invalid argument를 가진
오류를
반환한다.
proxy가 "socksProxy"에 대한
own property를 갖지만
"socksVersion"에 대한 own property를
갖지 않으면, 오류
코드 invalid argument를 가진 오류를 반환한다.
proxy를 데이터로 하여 성공을 반환한다.
프록시 구성 객체는 자신의 own properties 중 프록시 구성의 키와 일치하는 각 속성이 해당 키의 유효성 기준을 충족하는 JSON Object이다.
parameters와 세션 구성 플래그 flags가 주어졌을 때 기능을 처리하기 위해, 엔드포인트 노드는 다음 단계를 수행해야 한다.
parameters에서 "capabilities"
속성을
가져온 결과를
capabilities request로 둔다.
capabilities request가 JSON Object가 아니면, 오류 코드 invalid argument를 가진 오류를 반환한다.
capabilities request에서 "alwaysMatch"
속성을
가져온 결과를
required capabilities로 둔다.
capabilities request에서 "firstMatch"
속성을
가져온 결과를
all first match capabilities로 둔다.
validated first match capabilities를 빈 List로 둔다.
all first match capabilities의 색인 속성에 대응하는 각 first match capabilities에 대해:
merged capabilities를 빈 List로 둔다.
validated first match capabilities의 색인 속성에 대응하는 각 first match capabilities에 대해:
merged capabilities의 색인 속성에 대응하는 각 capabilities에 대해:
인수 capabilities로 기능 검증이 요구될 때:
capabilities가 JSON Object가 아니면 오류 코드 invalid argument를 가진 오류를 반환한다.
result를 빈 JSON Object로 둔다.
capabilities의 각 열거 가능한 own property에 대해 다음 하위 단계를 실행한다.
name을 속성의 이름으로 둔다.
value를 capabilities에서 name이라는 이름의 속성을 가져온 결과로 둔다.
첫 번째로 매칭되는 조건의 하위 단계를 실행한다.
null이다
deserialized가 null로
설정되도록 둔다.
acceptInsecureCerts"와 같다
value가 boolean이 아니면 오류 코드 invalid argument를 가진 오류를 반환한다. 그렇지 않으면 deserialized가 value로 설정되도록 둔다.
browserName"와 같다
browserVersion"와 같다
platformName"와 같다
value가 string이 아니면 오류 코드 invalid argument를 가진 오류를 반환한다. 그렇지 않으면 deserialized가 value로 설정되도록 둔다.
pageLoadStrategy"와 같다
value를 인수로 하여 페이지 로드 전략으로 역직렬화를 시도한 결과를 deserialized로 둔다.
proxy"와 같다
strictFileInteractability"와 같다
value가 boolean이 아니면 오류 코드 invalid argument를 가진 오류를 반환한다. 그렇지 않으면 deserialized가 value로 설정되도록 둔다.
timeouts"와 같다
value로 시간 제한 구성으로 역직렬화를 시도한 결과를 deserialized로 둔다.
unhandledPromptBehavior"와 같다
value를 인수로 하여 처리되지 않은 프롬프트 동작으로 역직렬화를 시도한 결과를 deserialized로 둔다.
name에 대응하는 확장 기능에 대해, value를 인수로 하여 추가 기능 역직렬화 알고리즘 실행을 시도한 결과를 deserialized로 둔다.
name이 구현에 알려져 있으면, value를 구현별 방식으로 역직렬화하기를 시도한 결과를 deserialized로 둔다. 그렇지 않으면 deserialized가 value로 설정되도록 둔다.
오류 코드 invalid argument를 가진 오류를 반환한다.
deserialized가 null이 아니면,
result에 대해 이름 name 및 값 deserialized로
속성을 설정한다.
JSON Object 인수 primary와 secondary로 기능 병합을 할 때, 엔드포인트 노드는 다음 단계를 수행해야 한다.
result를 새 JSON Object로 둔다.
primary의 각 열거 가능한 own property에 대해 다음 하위 단계를 실행한다.
secondary가 undefined이면 result를 반환한다.
secondary의 각 열거 가능한 own property에 대해 다음 하위 단계를 실행한다.
result를 반환한다.
JSON Object capabilities와 세션 구성 플래그 flags가 주어졌을 때 기능 매칭을 할 때, 엔드포인트 노드는 다음 단계를 수행해야 한다.
matched capabilities를 다음 항목들을 가진 JSON Object로 둔다.
browserName"
browserVersion"
platformName"
acceptInsecureCerts"
strictFileInteractability"
setWindowRect"
userAgent"
flags가 "http"를 포함하면,
다음 항목을 matched capabilities에 추가한다.
strictFileInteractability"
선택적으로 확장 기능을 matched capabilities의 항목으로 추가한다. 이 값들은 생략될 수 있으며, 모든 확장 기능이 추가되어야 한다는 요구사항은 없다.
capabilities의 own properties에 대응하는 각 name 및 value에 대해:
match value가 value와 같도록 둔다.
첫 번째로 매칭되는 name의 하위 단계를 실행한다.
browserName"
value가
matched capabilities의 "browserName" 항목과
같은 문자열이 아니면, null을 데이터로 하여
성공을 반환한다.
원격 엔드가
browserName을 올바르게 판단하기 위해
브라우저 프로세스를 시작해야 할 가능성이 있다.
이를 수행하기 전에는 가벼운 검사가 선호된다.
browserVersion"
value를 matched capabilities의
"browserVersion" 항목과 구현 정의 비교 알고리즘으로 비교한다.
비교는 "<", "<=", ">",
및 ">=" 연산자를 사용하여 버전에 제약을 두는
value를 허용하기 위한 것이다.
두 값이 매칭되지 않으면,
null을 데이터로 하여
성공을 반환한다.
각 사용자 에이전트는 사용자 에이전트 버전을 인코딩하는 서로 충돌하는 방식을 가질 가능성이 있고, 이러한 체계를 표준화하는 것은 이 표준의 범위를 벗어나므로 버전 비교는 구현 세부 사항으로 남겨져 있다.
원격 엔드가
browserVersion을 올바르게 판단하기 위해
브라우저 프로세스를 시작해야 할 가능성이 있다.
이를 수행하기 전에는 가벼운 검사가 선호된다.
platformName"
value가 matched capabilities의
"platformName" 항목과 같은 문자열이 아니면,
null을 데이터로 하여
성공을 반환한다.
다음 플랫폼 이름은 잘 이해된 의미론과 함께 널리 사용되고 있으며, 플랫폼 이름에 대한 기능 매칭 시, 잘 알려진 운영 체제에 대한 유효한 동의어로 이를 존중하면 가장 높은 상호운용성을 달성할 수 있다.
| 키 | 시스템 |
|---|---|
"linux" |
Linux 커널을 기반으로 하는 모든 서버 또는 데스크톱 시스템. |
"mac" |
Apple macOS의 모든 버전. |
"windows" |
데스크톱 및 모바일 버전을 포함한 Microsoft Windows의 모든 버전. |
이 목록은 완전하지 않다.
새 세션에서
기능을 반환할 때,
더 구체적인 platformName을 반환하는 것은 유효하며,
이를 통해 사용자는 WebDriver 구현이 실행 중인 운영 체제를
올바르게 식별할 수 있다.
acceptInsecureCerts"
안전하지 않은 TLS 허용 플래그가
설정되어 있고 value와 같지 않으면,
null을 데이터로 하여
성공을 반환한다.
엔드포인트 노드가 안전하지 않은 TLS 인증서를 지원하지 않고 이것이 결국 매칭이 이루어지지 않는 이유라면, 이 정보를 로컬 엔드에 제공하는 것이 유용하다.
proxy"
프록시
구성 있음 플래그가 설정되어 있거나,
value에 정의된 프록시 구성이
엔드포인트 노드의
구현별 유효성 검사를 통과하지 못하는 경우,
null을 데이터로 하여
성공을 반환한다.
로컬 엔드는 해당 기능이 존중되고 구성된 프록시가 사용될 것으로 기대할 때만 이 기능을 보낼 것이다. 의도는 이것이 불가능한 경우 새 세션이 설정되지 않도록 하는 것이다.
unhandledPromptBehavior"
value로
사용자 프롬프트 처리기 매칭 검사가
false이면, null을 데이터로 하여
성공을 반환한다.
name이 매칭된 기능 직렬화 알고리즘을 정의하는 추가 WebDriver 기능의 이름이면, value 및 flags를 인수로 하여 기능 name에 대한 매칭된 기능 직렬화 알고리즘을 실행한 결과를 match value로 둔다.
그렇지 않고 name이
확장
기능의 키이면,
name과 value에 대해 매칭하는
구현별 단계를 시도한 결과를
match value로 둔다. 매칭이 성공하지 않으면,
null을 데이터로 하여
성공을 반환한다.
match value가 null이 아니면, matched capabilities에 대해 이름 name 및 값 match value로 속성을 설정한다.
matched capabilities를 데이터로 하여 성공을 반환한다.
WebDriver 세션은 로컬 엔드와 특정 원격 엔드 사이의 논리적 연결을 나타낸다. 세션 객체는 해당 연결에 특화된 상태를 보유한다.
중개 노드는 각 활성 세션에 대해 연관된 세션을 유지한다. 이는 중개 노드가 New Session 명령을 실행할 때 생성되는, 업스트림 이웃의 세션이다. 중개 노드에서 세션을 닫으면 연관된 세션의 세션도 닫힌다.
세션은 세션 ID를 가지며, 이는 세션을 고유하게 식별하는 데 사용되는 UUID의 문자열 표현이다. 이는 세션을 생성할 때 설정된다.
세션은 세션이 생성될 때 설정되는 불리언 HTTP 플래그를 가진다. 이 플래그가 설정된 세션은 HTTP 세션이다.
원격 엔드는 연관된 활성 세션 목록을 가지며, 이는 현재 시작된 모든 세션의 목록이다.
원격 엔드는 연관된 활성 HTTP 세션 목록을 가지며, 이는 현재 시작된 모든 HTTP 세션의 목록이다.
엔드포인트 노드에 대해 단일 HTTP 세션만 허용된다는 제한은 활성 HTTP 세션 목록의 첫 번째 항목이 유일한 항목이 됨을 의미한다.
HTTP 세션은 연관된 현재 브라우징 컨텍스트를 가진다. 이는 명령이 실행될 대상인 브라우징 컨텍스트이며, 또한 연관된 현재 부모 브라우징 컨텍스트를 가진다. 이는 브라우징 컨텍스트를 변경할 때 현재 브라우징 컨텍스트의 부모로 설정된다. 그리고 연관된 현재 최상위 브라우징 컨텍스트를 가지며, 이는 브라우징 컨텍스트를 변경할 때 현재 브라우징 컨텍스트의 최상위 브라우징 컨텍스트 조상으로 설정된다.
HTTP 세션은 연관된 세션 타임아웃을 가지며, 이는 타임아웃 구성이다. 이는 처음에 새 타임아웃 구성으로 설정된다.
HTTP 세션은 연관된 페이지 로딩 전략을 가지며, 이는 페이지 로드 전략 표의 키워드 중 하나이다. 이는 처음에 normal로 설정된다.
HTTP 세션은 연관된 엄격한 파일 상호작용 가능성 상태를 가지며, 이는 불리언이다. 이는 처음에 false로 설정된다.
세션은 연관된 브라우징 컨텍스트 입력 상태 맵을 가지며, 이는 최상위 브라우징 컨텍스트를 키로 하고 입력 상태 객체를 값으로 하는 weak map이다. 이는 처음에 빈 맵으로 설정된다.
HTTP 세션은 연관된 요청 큐를 가지며, 이는 현재 처리를 기다리고 있는 요청들의 큐이다.
세션이 생성될 때, 세션의 기능을 정의하는 세션 구성
플래그의 집합이 제공된다. 이
명세는 항상 "http"를
세션 구성 플래그에 포함하여 세션을 생성하며, 이는
HTTP
플래그에 대응한다. 외부 명세는 추가
플래그를 정의하거나, HTTP 플래그 없이 세션을 생성할 수 있다.
세션별 상태에 더해, 원격 엔드가 엔드포인트 노드인 경우에는 모든 세션에 걸쳐 전역적인 추가 상태도 가진다.
엔드포인트 노드는 신뢰할 수 없거나 자체 서명된 TLS 인증서를 신뢰된 것으로 취급할지 여부를 나타내는 연관된 안전하지 않은 TLS 허용 플래그를 가진다. 엔드포인트가 안전하지 않은 TLS 연결 허용을 지원하지 않는 경우 이 플래그의 기본값은 false이고, 그렇지 않으면 unset이다.
엔드포인트 노드는 프록시가 이미 구성되어 있는지 여부를 나타내는 연관된 프록시 구성이 있음 플래그를 가진다. 엔드포인트가 프록시 구성을 지원하지 않는 경우 이 플래그의 기본값은 true이고, 그렇지 않으면 false이다.
JSON Object capabilites와 세션 구성 플래그 flags가 주어졌을 때, 세션을 생성하려면:
session id를 UUID 생성의 결과로 둔다.
session을 세션
ID session id와, flags가
"http"를 포함하는 HTTP 플래그를 가진 새 세션으로 둔다.
proxy를 capabilities에서
"proxy" 속성을 가져온 결과로 두고, 처음 일치하는 문의
하위 단계를 실행한다:
추출된 proxy 구성을 사용하여 사용자 에이전트 프록시를 설정하기 위한 구현 정의 단계를 수행한다. 정의된 프록시를 구성할 수 없으면 오류를 오류 코드 session not created와 함께 반환한다. 그렇지 않으면 프록시 구성이 있음 플래그를 true로 설정한다.
proxy"와 새 JSON Object인 값으로
설정한다.
capabilites에
"acceptInsecureCerts"라는 이름의 속성이 있으면, 엔드포인트
노드의 안전하지 않은 TLS 허용 플래그를
capabilities에서
"acceptInsecureCerts"라는 이름의 속성을 가져온 결과로 설정한다.
user prompt handler capability를 capabilities에서
"unhandledPromptBehavior" 속성을 가져온 결과로 둔다.
user prompt handler capability가 undefined가 아니면, user prompt handler capability로 사용자 프롬프트 처리기를 갱신한다.
serialized user prompt handler를 사용자 프롬프트 처리기를 직렬화한 것으로 둔다.
capabilities에 이름
"unhandledPromptBehavior"와 값 serialized
user prompt handler로 속성을 설정한다.
flags가 "http"를 contains하면:
strategy를 capabilities에서
"pageLoadStrategy" 속성을 가져온
결과로 둔다.
strategy가 문자열이면, 세션의 페이지 로딩
전략을 strategy로 설정한다. 그렇지 않으면,
페이지 로딩 전략을 normal로 설정하고
capabilities의 속성을 이름
"pageLoadStrategy" 및 값
"normal"로 설정한다.
strictFileInteractability를 capabilities에서
"strictFileInteractability" 속성을 가져온
결과로 둔다. strictFileInteractability가
불리언이면, session의 엄격한 파일
상호작용 가능성을 strictFileInteractability로 설정한다.
timeouts를 capabilities에서
"timeouts" 속성을 가져온 결과로 둔다.
timeouts가 undefined가 아니면,
session의 세션 타임아웃을
timeouts로 설정한다.
capabilities에 이름
"timeouts"와 값 session의
세션 타임아웃으로
타임아웃
구성을 직렬화한 것을 설정한다.
capabilities 안의 모든 확장 capabilities를 구현 정의 방식으로 처리한다.
외부 명세에 정의된 모든 WebDriver 새 세션 알고리즘을 인수 session, capabilities, 그리고 flags와 함께 실행한다.
session을 활성 세션에 추가한다.
flags가 "http"를 포함하면,
session을 활성 HTTP 세션에 추가한다.
webdriver-active 플래그를 true로 설정한다.
session가 주어졌을 때 세션을 닫기 위해, 원격 엔드는 다음 단계를 수행해야 한다:
session의 HTTP 플래그가 설정되어 있으면, session을 활성 HTTP 세션에서 제거한다.
session을 활성 세션에서 제거한다.
원격 엔드의 유형에 따라 다음 하위 단계를 수행한다:
활성 세션 목록이 비어 있으면:
webdriver-active 플래그를 false로 설정한다
사용자 프롬프트 처리기를 null로 설정한다.
안전하지 않은 TLS 허용 플래그를 unset한다.
프록시 구성이 있음 플래그를 그 기본값으로 재설정한다.
선택적으로, 모든 최상위 브라우징 컨텍스트를 언로드 프롬프트 없이 닫는다.
모든 구현별 정리 단계를 수행한다.
위 단계 중 어느 단계에서든 오류가 발생했다면,
그 오류를 반환하고, 그렇지 않으면
데이터 null과 함께 success를 반환한다.
세션을 닫으면 연관된 브라우저 프로세스가 종료될 수도 있다. 모든 구현별 정리 단계는 응답이 클라이언트로 다시 전송된 후에 수행된다고 가정한다. 그래야 연결이 너무 이르게 닫히지 않는다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session |
New Session 명령은 엔드포인트 노드에 새 WebDriver 세션을 생성한다. 생성에 실패하면 session not created 오류가 반환된다.
원격 엔드가 중개 노드인 경우, 이는 기능 처리 알고리즘의 결과를 사용하여 새 세션 요청을 적절한 엔드포인트 노드로 라우팅할 수 있다. 중개 노드는 이 과정을 돕기 위한 확장 기능을 자유롭게 정의할 수 있다. 그러나 이러한 특정 기능은 엔드포인트 노드로 전달되어서는 안 된다.
중개 노드가 사용자 에이전트 기능과 무관한 추가 정보를 요구하는 경우, 이 정보는 요청된 기능의 일부가 아니라 최상위 매개변수로 전달하는 것이 권장된다. 중개 노드는 사용자 지정 최상위 매개변수, 즉 기능이 아닌 매개변수를 후속 원격 엔드 노드로 전달해야 한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
구현이 엔드포인트 노드이고 활성 HTTP 세션 목록이 비어 있지 않거나, 또는 그 밖에 구현이 추가 세션을 시작할 수 없는 경우, 오류 코드 session not created를 가진 오류를 반환한다.
원격 엔드가 중개 노드이면, 구현 정의 단계를 수행하여 오류를 오류 코드 session not created와 함께 반환하거나, 이 알고리즘의 나머지에 따라 원격 엔드가 반환하는 것과 동형인 데이터를 가진 success를 반환하게 한다. 오류가 반환되지 않으면, 중개 노드는 업스트림 노드에서 생성된 세션에 대한 참조를 연관된 세션으로 보존해야 하며, 그렇게 해서 이후 명령에서 명령을 이 연관된 세션으로 전달할 수 있게 한다.
"http"를 포함하는 set을 flags로 둔다.
capabilities가 null이면,
오류 코드 session not
created를 가진
오류를
반환한다.
capabilities 및 flags로 세션을 생성한 결과를 session으로 둔다.
다음으로 초기화된 JSON Object를 body로 둔다.
sessionId"
capabilities"
session의 현재 최상위 브라우징 컨텍스트를 엔드포인트 노드의 최상위 브라우징 컨텍스트 중 하나로 설정한다. 이때 system focus를 가진 최상위 브라우징 컨텍스트를 선호하고, 그렇지 않으면 visibility state가 visible인 임의의 최상위 브라우징 컨텍스트를 선호한다.
WebDriver 구현은 일반적으로 완전히 새로운 브라우저 인스턴스를 시작하지만, 이 명세에는 그러한 요구사항이 없다(또는 WebDriver가 웹 브라우저만 자동화하는 데 사용되어야 한다는 요구사항도 없다). 구현은 예를 들어 현재 포커스를 가진 창을 선택함으로써 기존 브라우저 인스턴스를 사용하도록 선택할 수 있다.
body를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| DELETE | /session/{session id} |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session이 활성 HTTP 세션이면, session으로 세션 닫기를 시도한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /status |
구현은 선택적으로 본문의 일부로
추가 메타 정보를 포함할 수 있지만,
최상위 속성
ready와 message는
예약되어 있으며 덮어써서는 안 된다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
타이머는 struct이다. 이는 boolean인 시간 제한 발생 플래그를 가지며, 초기값은 false이다.
timer와 timeout이 주어졌을 때 타이머 시작은
Assert: timeout은 null이 아니다.
다음 단계를 병렬로 실행한다.
적어도 timeout 밀리초가 지날 때까지 기다린다.
timer의 시간 제한 발생 플래그를 true로 설정한다.
시간 제한 구성은 struct이며, 스크립트 평가, 탐색 및 요소 검색에 대한 시간 제한을 나타낸다. 이는 정수 또는 null이며 처음에 30,000으로 설정되는 스크립트 시간 제한 item, 정수 또는 null이며 처음에 300,000으로 설정되는 페이지 로드 시간 제한 item, 그리고 정수 또는 null이며 처음에 0으로 설정되는 암시적 대기 시간 제한 item을 가진다. timeouts가 주어졌을 때 시간 제한 구성으로 역직렬화하려면:
timeouts를 timeouts로 JSON 유래 JavaScript 값을 Infra 값으로 변환한 결과로 설정한다.
configuration을 새 시간 제한 구성으로 둔다.
timeouts의 각 key → value에 대해:
«"script", "pageLoad",
"implicit"»가 key를
contain하지 않으면,
continue한다.
value가 null도 아니고 0 이상 최대 안전 정수 이하의 number도 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
key와 매칭되는 하위 단계를 실행한다.
script"
configuration의 스크립트 시간 제한을 value로 설정한다.
pageLoad"
configuration의 페이지 로드 시간 제한을 value로 설정한다.
implicit"
configuration의 암시적 대기 시간 제한을 value로 설정한다.
configuration을 데이터로 하여 성공을 반환한다.
serialized를 빈 map으로 둔다.
serialized["script"]를
timeouts의 스크립트 시간 제한으로 설정한다.
serialized["pageLoad"]를
timeouts의 페이지 로드 시간 제한으로 설정한다.
serialized["implicit"]를
timeouts의 암시적 대기 시간 제한으로 설정한다.
serialized로 Infra 값을 JSON 호환 JavaScript 값으로 변환한 결과를 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/timeouts |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
timeouts를 타임아웃 구성을 직렬화한 것으로 두되, 세션의 타임아웃 구성을 사용한다.
데이터 timeouts와 함께 success를 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/timeouts |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
parameters로 시간 제한 구성으로 역직렬화를 시도한 결과를 timeouts로 둔다.
session의 시간 제한 구성을 timeouts로 설정한다.
많은 WebDriver 명령은 session의 현재 브라우징 컨텍스트 또는 현재 최상위 브라우징 컨텍스트 중 하나의 컨텍스트에서 일어난다. session의 현재 최상위 브라우징 컨텍스트는 프로토콜에서 그와 연관된 창 핸들로 표현된다. 최상위 브라우징 컨텍스트가 창으로 전환 명령을 사용하여 선택되면, 특정 브라우징 컨텍스트는 프레임으로 전환 명령을 사용하여 선택될 수 있다.
“window”라는 용어를
최상위 브라우징 컨텍스트를
가리키는 데 사용하는 것은 레거시이며,
운영 체제의 “window” 개념이나
DOM Window 객체 어느 것과도 대응하지 않는다.
브라우징 컨텍스트는 그 navigable이 파괴되었을 때 더 이상 열려 있지 않음이라고 한다.
각 브라우징 컨텍스트에는 이를 고유하게
식별하는 연관된
창 핸들이 있다. 이는 String이어야 하며,
"current"여서는 안 된다.
웹 프레임은 frame 또는 iframe을 식별하는 데 사용되는 추상화로, 이것이 프로토콜을 통해 원격 엔드와 로컬 엔드 사이에서 전달될 때 사용된다.
웹 프레임
식별자는
문자열 상수 "frame-075b-4da1-b6ba-e579c2d3230a"이다.
ECMAScript Object는 웹 프레임 식별자 own property를 가지면 웹 프레임을 나타낸다.
웹 창은 window를 식별하는 데 사용되는 추상화로, 이것이 프로토콜을 통해 원격 엔드와 로컬 엔드 사이에서 전달될 때 사용된다.
웹 창
식별자는
문자열 상수 "window-fcc6-11e5-b4f8-330a88ab9d7f"이다.
ECMAScript Object는 웹 창 식별자 own property를 가지면 웹 창을 나타낸다.
WindowProxy 객체 window를 가진
WindowProxy 참조 객체는
다음과 같이 주어진다.
window의 연관된 브라우징 컨텍스트가 최상위 브라우징 컨텍스트이면, identifier를 웹 창 식별자로 둔다.
그렇지 않으면 이를 웹 프레임 식별자로 둔다.
다음 속성들로 초기화된 JSON Object를 반환한다.
웹 프레임을 나타내는 JSON Object object로 웹 프레임을 역직렬화하려면:
object에 own property인 웹 프레임 식별자가 없으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
reference가 String이 아니면, 오류 코드 invalid argument를 가진 오류를 반환한다.
browsing context를 그 창 핸들이 reference인 브라우징 컨텍스트로 두고, 그러한 브라우징 컨텍스트가 없으면 null로 둔다.
browsing context가 null이거나 최상위 브라우징 컨텍스트이면, 오류 코드 no such frame를 가진 오류를 반환한다.
browsing context의 연관된 window를 데이터로 하여 성공을 반환한다.
웹 창을 나타내는 JSON Object object로 웹 창을 역직렬화하려면:
object에 own property인 웹 창 식별자가 없으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
reference가 String이 아니면, 오류 코드 invalid argument를 가진 오류를 반환한다.
browsing context를 그 창 핸들이 reference인 브라우징 컨텍스트로 두고, 그러한 브라우징 컨텍스트가 없으면 null로 둔다.
browsing context가 null이거나 최상위 브라우징 컨텍스트가 아니면, 오류 코드 no such window를 가진 오류를 반환한다.
browsing context의 연관된 window를 데이터로 하여 성공을 반환한다.
session 및 context가 주어졌을 때 현재 브라우징 컨텍스트를 설정해야 하는 경우, 구현은 다음 단계를 따라야 한다.
session의 현재 브라우징 컨텍스트를 context로 설정한다.
session의 현재 부모 브라우징 컨텍스트를, 그 컨텍스트가 존재하면 context의 부모 브라우징 컨텍스트로, 그렇지 않으면 null로 설정한다.
session 및 context가 주어졌을 때 현재 최상위 브라우징 컨텍스트를 설정해야 하는 경우, 구현은 다음을 수행해야 한다.
Assert: context는 최상위 브라우징 컨텍스트이다.
session의 현재 최상위 브라우징 컨텍스트를 context로 설정한다.
session 및 context로 현재 브라우징 컨텍스트를 설정한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/window |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session의 현재 최상위 브라우징 컨텍스트와 연관된 창 핸들을 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| DELETE | /session/{session id}/window |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
session의 현재 최상위 브라우징 컨텍스트를 닫는다.
더 이상 열려 있는 최상위 브라우징 컨텍스트가 없으면, 세션 닫기를 시도한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/window |
창 전환은 이후의 모든 명령의 대상으로 사용되는 session의 현재 최상위 브라우징 컨텍스트를 선택한다. 탭 브라우저에서는 일반적으로 브라우징 컨텍스트를 포함하는 탭을 선택된 탭으로 만든다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
handle을 parameters에서
"handle" 속성을 가져온 결과로 둔다.
handle이 undefined이면, 오류 코드 invalid argument를 가진 오류를 반환한다.
다른 최상위 브라우징 컨텍스트에 포커스하는 것을 막는 활성 사용자 프롬프트가 있으면, 오류 코드 unexpected alert open을 가진 오류를 반환한다.
handle이 어떤 최상위 브라우징 컨텍스트의 연관된 창 핸들과 같으면, context를 그 브라우징 컨텍스트로 두고, session 및 context로 현재 최상위 브라우징 컨텍스트를 설정한다.
그렇지 않으면, 오류 코드 no such window를 가진 오류를 반환한다.
OS 수준 포커스를 변경하지 않고, 사용자가 상호작용을 위해 session의 현재 브라우징 컨텍스트를 선택한 결과로 생길 구현별 상태를 갱신한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/window/handles |
창 핸들이 반환되는 순서는 임의적이다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
handles를 List로 둔다.
원격 엔드의 각 최상위 브라우징 컨텍스트에 대해, 연관된 창 핸들을 handles에 push한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/window/new |
새 최상위 브라우징 컨텍스트를 생성한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
구현이 새 최상위 브라우징 컨텍스트 생성을 지원하지 않으면, 오류 코드 unsupported operation을 가진 오류를 반환한다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
type hint를 parameters에서
"type" 속성을 가져온
결과로 둔다.
URL을 "about:blank"로, target을 빈
문자열로, features를 "noopener"로 설정하고
사용자 에이전트가 새 브라우징 컨텍스트를 생성하도록 구성하여
window open 단계를 실행함으로써
새 최상위 브라우징 컨텍스트를
생성한다. 이는 생성된 브라우징 컨텍스트에 대한
포커싱 단계를 호출하지 않고
수행되어야 한다. type hint가 "tab" 값을 가지고,
구현이 같은 OS 창 안의 여러 브라우징 컨텍스트를 지원하면,
새 브라우징 컨텍스트는 session의 현재 브라우징
컨텍스트와 OS 창을 공유하는 것이 좋다. type hint가
"window"이고 구현이 별도 OS 창의 여러 브라우징 컨텍스트를 지원하면,
생성된 브라우징 컨텍스트는 새 OS 창에 있는 것이 좋다. 그 밖의 모든 경우
브라우징 컨텍스트가 사용자에게 표시되는 방식의 세부 사항은
구현 정의이다.
handle을 새로 생성된 창의 연관된 창 핸들로 둔다.
새로 생성된 창이 session의 현재 브라우징
컨텍스트와 OS 수준 창을 공유하면 type을 "tab"으로,
그렇지 않으면 "window"로 둔다.
result를 다음으로 초기화된 새 JSON Object로 둔다.
handle"
type"
result를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/frame |
프레임으로 전환 명령은 이후 명령에서 session의 현재 브라우징 컨텍스트로 사용할 session의 현재 최상위 브라우징 컨텍스트 또는 session의 현재 브라우징 컨텍스트의 자식 브라우징 컨텍스트를 선택하는 데 사용된다. session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
id를 parameters에서
"id" 속성을 가져온 결과로 둔다.
id가 null,
Number 객체,
또는 웹 요소를 나타내는
Object가 아니면,
오류 코드 invalid argument를 가진
오류를
반환한다.
첫 번째로 매칭되는 조건의 하위 단계를 실행한다.
null이다
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
session 및 session의 현재 최상위 브라우징 컨텍스트로 현재 브라우징 컨텍스트를 설정한다.
Number 객체이다
id가 0보다 작거나 216 – 1보다 크면, 오류 코드 invalid argument를 가진 오류를 반환한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
window를 session의 현재 브라우징 컨텍스트의 활성 문서의 연관된 window로 둔다.
id가 window의 지원되는 속성 인덱스가 아니면, 오류 코드 no such frame를 가진 오류를 반환한다.
child window를
window.[[GetOwnProperty]]
(id)를 호출하여 얻은
WindowProxy 객체로 둔다.
session 및 child window의 브라우징 컨텍스트로 현재 브라우징 컨텍스트를 설정한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 id로 알려진 요소 가져오기를 시도한 결과로 둔다.
element가
frame
또는
iframe
요소가 아니면,
오류 코드 no
such frame를 가진
오류를 반환한다.
session 및 element의 content navigable의 활성 브라우징 컨텍스트로 현재 브라우징 컨텍스트를 설정한다.
OS 수준 포커스를 변경하지 않고, 사용자가 상호작용을 위해 session의 현재 브라우징 컨텍스트를 선택한 결과로 생길 구현별 상태를 갱신한다.
WebDriver는 동일 출처 정책의 제약을 받지 않으므로, 자식 브라우징 컨텍스트가 현재 브라우징 컨텍스트와 다른 출처이더라도, 항상 그 안으로 전환할 수 있다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/frame/parent |
부모 프레임으로 전환 명령은 이후 명령을 위해 session의 현재 브라우징 컨텍스트를 session의 현재 브라우징 컨텍스트의 부모로 설정한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 이미 최상위 브라우징 컨텍스트이면:
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session의 현재 부모 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
세션의 현재 부모 브라우징 컨텍스트가 null이 아니면, session 및 현재 부모 브라우징 컨텍스트로 현재 브라우징 컨텍스트를 설정한다.
OS 수준 포커스를 변경하지 않고, 사용자가 상호작용을 위해 session의 현재 브라우징 컨텍스트를 선택한 결과로 생길 구현별 상태를 갱신한다.
WebDriver는 session의 현재 최상위 브라우징 컨텍스트를 포함하는 운영 체제 창과 상호작용하기 위한 명령을 제공한다. 서로 다른 운영 체제의 창 관리자는 서로 다른 능력을 제공하므로, 이 절의 모든 명령이 모든 원격 엔드에서 지원될 수 있는 것은 아니다. 이러한 명령에 대한 지원 여부는 창 크기 조정/위치 지정 기능으로 결정된다. 명령이 지원되지 않는 경우, unsupported operation 오류가 반환된다.
최상위 브라우징 컨텍스트에는 그 OS 위젯 창이 어떤 표시 상태에 있는지를 설명하는 연관된 창 상태가 있다. 이는 다음 상태 중 하나일 수 있다.
| 상태 | 키워드 | 기본값 | 설명 |
|---|---|---|---|
| 최대화된 창 상태 | "maximized"
|
창이 최대화되어 있다. | |
| 최소화된 창 상태 | "minimized"
|
창이 아이콘화되어 있다. | |
| 일반 창 상태 | "normal"
|
✓ | 창이 일반적으로 표시된다. |
| 전체 화면 창 상태 | "fullscreen"
|
창이 전체 화면 모드에 있다. |
어떤 이유로든 최상위 브라우징 컨텍스트의 OS 창이 창 상태 중 어느 하나에 들어갈 수 없거나, 이 개념이 현재 시스템에 적용되지 않는 경우, 기본 상태는 normal이어야 한다.
WindowProxy window에 대한 WindowRect 객체는 다음 속성으로 초기화된 Object이다.
x"
window의 screenX 속성.
y"
window의 screenY 속성.
width"
windows의 outerWidth 속성.
height"
window의 outerHeight 속성.
연관된 최상위 브라우징 컨텍스트를 가진 운영 체제 수준 창이 주어졌을 때, 창을 최대화하려면, 운영 체제 수준 창을 최대화된 창 상태로 전환하는 구현별 단계를 실행한다. 창 관리자가 창 크기 조정을 지원하지만 창 최대화 개념을 갖지 않는 경우, 창 크기는 현재 화면에 대해 창 관리자가 허용하는 최대 가용 크기까지 증가되어야 한다. 창이 전환을 완료했을 때, 또는 구현 정의 시간 제한 안에 반환한다.
연관된 최상위 브라우징 컨텍스트를 가진 운영 체제 수준 창이 주어졌을 때, 창을 아이콘화하려면, 운영 체제 수준 창을 최소화된 창 상태로 전환하는 구현별 단계를 실행한다. 최상위 브라우징 컨텍스트의 활성 문서의 visibility state가 상태에 도달하거나, 작업 시간이 초과될 때까지 이 작업에서 반환하지 않는다.
연관된 최상위 브라우징 컨텍스트를 가진 운영 체제 수준 창이 주어졌을 때, 창을 복원하려면, 창을 보이는 화면으로 복원하거나 숨김 해제하는 구현별 단계를 실행한다. 최상위 브라우징 컨텍스트의 활성 문서의 visibility state가 visible 상태에 도달하거나, 작업 시간이 초과될 때까지 이 작업에서 반환하지 않는다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/window/rect |
창 사각형 가져오기 명령은 session의 현재 최상위 브라우징 컨텍스트에 대응하는 운영 체제 창의 화면상 크기와 위치를 반환한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
session의 현재 최상위 브라우징 컨텍스트에 대한 WindowRect 객체로 설정된 데이터를 가진 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/window/rect |
창 사각형 설정 명령은 session의 현재 최상위 브라우징 컨텍스트에 대응하는 운영 체제 창의 크기와 위치를 변경한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
width를 parameters에서
"width"라는 이름의
속성을 가져온 결과로 둔다.
width가 undefined이면, width를 null로 둔다.
height를 parameters에서
"height"라는 이름의
속성을 가져온 결과로 둔다.
height가 undefined이면, height를 null로 둔다.
x를 parameters에서
"x"라는 이름의 속성을 가져온
결과로 둔다.
x가 undefined이면, x를 null로 둔다.
y를 parameters에서
"y"라는 이름의 속성을 가져온
결과로 둔다.
y가 undefined이면, y를 null로 둔다.
width 또는 height가 null도 아니고 0부터 231 − 1까지의 Number도 아니면, 오류 코드 invalid argument를 가진 오류를 반환한다.
x 또는 y가 null도 아니고 −(231)부터 231 − 1까지의 Number도 아니면, 오류 코드 invalid argument를 가진 오류를 반환한다.
원격 엔드가 어떤 이유로든 session의 현재 최상위 브라우징 컨텍스트에 대한 창 사각형 설정 명령을 지원하지 않으면, 오류 코드 unsupported operation을 가진 오류를 반환한다.
창 사각형 설정 명령이 부분적으로 지원되는 경우(즉, 인수의 일부 조합은 지원되지만 다른 조합은 지원되지 않는 경우), 구현은 나머지 단계를 계속해야 한다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
window를 session의 현재 최상위 브라우징 컨텍스트를 포함하는 운영 체제 창으로 둔다.
구현이 window의 크기를 설정할 수 있으면:
width가 null이 아니면, 브라우저 chrome과 외부에서 그려지는 창 장식을 포함하여, window의 너비를 CSS 픽셀 단위로 가능한 한 width에 가까운 값으로 설정한다.
height가 null이 아니면, 브라우저 chrome과 외부에서 그려지는 창 장식을 포함하여, window의 높이를 CSS 픽셀 단위로 가능한 한 height에 가까운 값으로 설정한다.
구현이 window의 위치를 설정할 수 있으면:
x가 null이 아니면, window의 왼쪽 가장자리의 x 좌표를 가능한 한 x에 가까운 값으로 설정한다.
y가 null이 아니면, window의 위쪽 가장자리의 y 좌표를 가능한 한 y에 가까운 값으로 설정한다.
session의 현재 최상위 브라우징 컨텍스트에 대한 WindowRect 객체로 설정된 데이터를 가진 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/window/maximize |
창 최대화 명령은 session의 현재 최상위 브라우징 컨텍스트를 포함하는 창에 대해, 창 관리자별 “최대화” 작업이 있으면 이를 호출한다. 이는 일반적으로 전체 화면으로 전환하지 않고 창을 최대 가용 크기까지 키운다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
원격 엔드가 어떤 이유로든 session의 현재 최상위 브라우징 컨텍스트에 대한 창 최대화 명령을 지원하지 않으면, 오류 코드 unsupported operation을 가진 오류를 반환한다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
session의 현재 최상위 브라우징 컨텍스트의 창을 최대화한다.
session의 현재 최상위 브라우징 컨텍스트에 대한 WindowRect 객체로 설정된 데이터를 가진 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/window/minimize |
창 최소화 명령은 session의 현재 최상위 브라우징 컨텍스트를 포함하는 창에 대해, 창 관리자별 “최소화” 작업이 있으면 이를 호출한다. 이는 일반적으로 창을 시스템 트레이에 숨긴다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
원격 엔드가 어떤 이유로든 session의 현재 최상위 브라우징 컨텍스트에 대한 창 최소화 명령을 지원하지 않으면, 오류 코드 unsupported operation을 가진 오류를 반환한다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
session의 현재 최상위 브라우징 컨텍스트에 대한 WindowRect 객체로 설정된 데이터를 가진 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/window/fullscreen |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
원격 엔드가 전체 화면을 지원하지 않으면, 오류 코드 unsupported operation을 가진 오류를 반환한다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
session의 현재 최상위 브라우징 컨텍스트의 활성 문서의 문서 요소로 요소를 전체 화면으로 만든다를 호출한다.
이제 창은 전체 화면 창 상태에 있다.
session의 현재 최상위 브라우징 컨텍스트에 대한 WindowRect 객체로 설정된 데이터를 가진 성공을 반환한다.
웹 요소는 요소를 식별하는 데 사용되는 추상화로, 이것이 프로토콜을 통해 원격 엔드와 로컬 엔드 사이에서 전달될 때 사용된다.
웹 요소
식별자는 문자열 상수
"element-6066-11e4-a52e-4f735466cecf"이다.
ECMAScript Object는 웹 요소 식별자 own property를 가지면 웹 요소를 나타낸다.
WebDriver 노드 ID는 특정 WebDriver 세션 안의 DOM 노드에 대한 핸들을 나타내는 전역적으로 고유한 문자열이다.
weak map은 키가 약하게 유지되는 map이다. 즉 키 객체가 가비지 컬렉션되면 항목이 제거되며, map 안에 존재한다고 해서 가비지 컬렉션이 방지되지 않는다. 이는 키 객체에 직접 속성을 정의하는 것의 대안으로 동작한다.
WebDriver 세션은 브라우징 컨텍스트 그룹 노드 map을 가지며, 이는 브라우징 컨텍스트 그룹과 노드 ID map 사이의 weak map이다.
노드 ID map은 노드와 그에 대응하는 WebDriver 노드 ID 사이의 weak map이다.
WebDriver 세션은 navigable seen nodes map을 가지며, 이는 navigable과 집합 사이의 weak map이다.
session, browsing context, 그리고 reference가 주어졌을 때 노드를 얻으려면:
session, browsing context 및 node가 주어졌을 때 노드 참조를 가져오거나 생성하려면:
node id map[node]을 반환한다.
session, browsing context 및 reference가 주어졌을 때 다음 단계가 true를 반환하면 노드 참조가 알려져 있다:
session 및 reference가 주어졌을 때 알려진 요소를 가져오려면:
Element를 구현하지 않으면,
오류
코드 no such element를 가진 오류를 반환한다.
session 및 element가 주어졌을 때 웹 요소 참조를 가져오거나 생성하려면:
Element를 구현한다.
session 및 element에 대한 웹 요소 참조 객체는 다음과 같다.
identifier를 웹 요소 식별자로 둔다.
reference를 session 및 element로 웹 요소 참조를 가져오거나 생성한 결과로 둔다.
이름이 identifier이고 값이 reference인 프로퍼티로 초기화된 JSON Object를 반환한다.
웹 요소를 나타내는 JSON Object object로 웹 요소를 역직렬화하려면:
object에 own property인 웹 요소 식별자가 없으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
reference가 String이 아니면, 오류 코드 invalid argument를 가진 오류를 반환한다.
element를 session 및 reference로 알려진 요소 가져오기를 시도한 결과로 둔다.
element를 데이터로 하여 성공을 반환한다.
요소는 그 노드 문서가 활성 문서가 아니거나, 그것이 연결되어 있지 않으면 stale이다.
요소를 뷰 안으로 스크롤하려면, 요소가 아직 뷰 안에 있지 않은 경우에만 다음 단계를 수행한다.
options를
다음 ScrollIntoViewOptions로 둔다.
behavior"
instant"
block"
end"
inline"
nearest"
element를 this 값으로 하여 Function.[[Call]](scrollIntoView, options)를 실행한다.
편집 가능 요소는 타이핑 및 지우기에 사용할 수 있는 요소이며, 다음 두 하위 범주로 나뉜다.
다음 상태 중 하나에 있는
type
속성을 가지며,
변경
가능한(예: 읽기 전용 또는
비활성화됨이 아닌)
input
요소를 가리킨다.
그리고
textarea
요소를 가리킨다.
편집 호스트 또는 content editable인 요소를 가리킨다.
요소는 그 "pointer-events" 스타일 프로퍼티의
해결된
값이
"none"이면
포인터
이벤트가 비활성화되어 있다고 한다.
요소가
input
요소이고
그
readonly
속성이 설정되어 있으면
읽기 전용으로 간주된다.
요소가 포인터 동작을 사용하여 상호작용될 수 있는지를 판단하기 위해, WebDriver는 히트 테스팅을 수행하여 상호작용이 요청된 요소에 도달할 수 있는지를 찾는다.
상호작용 가능 요소는 요소 중 포인터 상호작용 가능하거나 키보드 상호작용 가능한 요소이다.
포인터 상호작용 가능 요소는 렌더링된 스크롤바의 크기를 제외하고 뷰포트 안에 있는 그 사각형의 중앙점에서 발견되는 페인트 순서로 정의되는 첫 번째 요소로 정의된다.
키보드 상호작용 가능 요소는
포커스 가능 영역을
가지는 임의의 요소,
body
요소,
또는 문서 요소이다.
요소의 뷰 안 중앙점은
요소의 첫 번째 DOMRect인 getClientRects()와
초기 뷰포트
사이의 교차 영역인
사각형의 원점 위치이다.
이는 다음과 같이 계산할 수 있다.
rectangle을
element에서
getClientRects()를
호출하여 반환된
DOMRect 컬렉션의
첫 번째 객체로 둔다.
x를 floor((left + right) ÷ 2.0)로 둔다.
y를 floor((top + bottom) ÷ 2.0)로 둔다.
(x, y) 쌍을 반환한다.
요소 element는 다음 단계가 true를 반환하면 비활성화됨이다.
element가 option 요소이거나 element가 optgroup 요소이면:
element의 각 포함 조상 ancestor에 대해:
ancestor가 optgroup 요소이거나 ancestor가 select 요소이고, ancestor가 실제로 비활성화되어 있으면, true를 반환한다.
false를 반환한다.
element가 실제로 비활성화되어 있는지를 반환한다.
요소는 그 자체의 포인터 상호작용 가능 페인트 트리의 구성원인 경우, 그 포인터 이벤트가 비활성화되어 있지 않다고 가정하면 뷰 안에 있음이다.
요소는 그 중앙점에서의 포인터 상호작용 가능 페인트 트리가 비어 있거나, 이 트리의 첫 번째 요소가 그 자신에 대한 포함 후손이 아니면 가려져 있음이다.
요소 element의 포인터 상호작용 가능 페인트 트리는 다음 방식으로 생성된다:
element가 session의 현재 브라우징 컨텍스트의 활성 문서와 같은 트리에 있지 않으면, 빈 시퀀스를 반환한다.
rectangles를
element에서 getClientRects()를
호출하여 반환된 DOMRect 시퀀스로
둔다.
rectangles의 길이가 0이면, 빈 시퀀스를 반환한다.
center point를 element의 뷰 내 중심점으로 둔다.
좌표 center point가 주어졌을 때 점으로부터의 요소들을 반환한다.
섀도 루트는 섀도 루트를 식별하는 데 사용되는 추상화로, 이것이 프로토콜을 통해 원격 엔드와 로컬 엔드 사이에서 전달될 때 사용된다.
섀도
루트 식별자는 문자열 상수
"shadow-6066-11e4-a52e-4f735466cecf"이다.
ECMAScript Object는 섀도 루트 식별자 own property를 가지면 섀도 루트를 나타낸다.
session 및 reference가 주어졌을 때 알려진 섀도 루트를 가져오려면:
ShadowRoot를 구현하지 않으면,
오류
코드
no such shadow root를 가진 오류를
반환한다.
session 및 shadow root가 주어졌을 때 섀도 루트 참조를 가져오거나 생성하려면:
ShadowRoot를 구현한다.
session 및 shadow root에 대한 섀도 루트 참조 객체는 다음과 같이 주어진다.
identifier를 섀도 루트 식별자로 둔다.
reference를 session 및 shadow root로 섀도 루트 참조를 가져오거나 생성한 결과로 둔다.
이름이 identifier이고 값이 reference인 프로퍼티로 초기화된 JSON Object를 반환한다.
섀도 루트를 나타내는 JSON Object object로 섀도 루트를 역직렬화해야 하는 경우:
object에 own property인 섀도 루트 식별자가 없으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
reference가 String이 아니면, 오류 코드 invalid argument를 가진 오류를 반환한다.
shadow를 session 및 reference로 알려진 섀도 루트 가져오기를 시도한 결과로 둔다.
shadow를 데이터로 하여 성공을 반환한다.
섀도 루트는 그 노드 문서가 활성 문서가 아니거나, 그 host로 가리켜지는 요소 노드가 stale이면 분리되어 있다.
요소 찾기, 요소들 찾기, 요소에서 요소 찾기, 요소에서 요소들 찾기, 섀도 루트에서 요소 찾기, 및 섀도 루트에서 요소들 찾기 명령은 개별 요소 및 요소 컬렉션의 조회를 허용한다. 요소 검색은 제공된 선택자의 표현식과 일치하는 문서 노드의 전위 순회를 사용하여 수행된다.
session, start node, using 및 value가 주어졌을 때 찾기가 필요한 경우, 원격 엔드는 다음 단계를 실행해야 한다.
location strategy를 using과 같게 둔다.
selector를 value와 같게 둔다.
timeout을 session의 세션 시간 제한의 암시적 대기 시간 제한으로 둔다.
timer를 새 타이머로 둔다.
timeout이 null이 아니면:
timer와 timeout으로 타이머를 시작한다.
elements returned를 빈 List로 둔다.
elements returned가 비어 있고 timer의 timeout fired flag가 설정되어 있지 않은 동안:
elements returned를 start node 및 selector를 인수로 하여 관련 요소 위치 전략을 호출하기를 시도한 결과로 설정한다.
DOMException, SyntaxError,
XPathException, 또는 기타 오류가 발생하면
invalid selector 오류를 반환한다.
result를 빈 List로 둔다.
elements returned 안의 각 element에 대해, session 및 element에 대한 웹 요소 참조 객체를 result에 추가한다.
result를 데이터로 하여 성공을 반환한다.
요소 위치 전략은 session의 현재 브라우징 컨텍스트 안의 요소를 검색하는 데 어떤 기법을 사용해야 하는지를 결정하는 열거형 속성이다. 다음 위치 전략 표는 이 속성에 대해 정의된 키워드와 상태를 나열한다.
| 상태 | 키워드 |
|---|---|
| CSS 선택자 | "css selector"
|
| 링크 텍스트 선택자 | "link text"
|
| 부분 링크 텍스트 선택자 | "partial link text"
|
| 태그 이름 | "tag name"
|
| XPath 선택자 | "xpath"
|
CSS 선택자 전략으로 웹 요소를 찾으려면, 다음 단계를 완료해야 한다.
elements를 start node를 this로,
selector를 인수로 하여
querySelectorAll()를
호출한 결과로 둔다. 이로 인해 예외가 throw되면,
오류
코드
invalid selector를 가진
오류를 반환한다.
elements를 데이터로 하여 성공을 반환한다.
링크 텍스트 전략으로 웹 요소를 찾으려면, 다음 단계를 완료해야 한다.
elements를 start node를 this로,
"a"를 인수로 하여
querySelectorAll()를
호출한 결과로 둔다. 이것이 예외를 throw하면,
오류
코드 unknown error를 가진
오류를 반환한다.
result를 빈 NodeList로 둔다.
elements 안의 각 element에 대해:
rendered text를 element에 대한 요소 텍스트 가져오기 호출을 통해 반환될 값으로 둔다.
trimmed text를 문자열 rendered text의 시작과 끝에서 모든 공백을 제거한 결과로 둔다.
trimmed text가 selector와 같으면, element를 result에 추가한다.
result를 데이터로 하여 성공을 반환한다.
부분 링크 텍스트 전략은
링크 텍스트 전략과 매우 유사하지만,
전체 문자열과 매칭하는 대신
부분 문자열만 매칭하면 된다.
즉, 선택자 표현식을 포함하는 렌더링된 텍스트를 가진
모든
a
요소를 반환한다.
부분 링크 텍스트 전략으로 웹 요소를 찾으려면, 다음 단계를 완료해야 한다.
elements를 start node를 this로,
"a"를 인수로 하여
querySelectorAll()를
호출한 결과로 둔다. 이것이 예외를 throw하면,
오류
코드 unknown error를 가진
오류를 반환한다.
result를 빈 NodeList로 둔다.
elements 안의 각 element에 대해:
rendered text를 element에 대한 요소 텍스트 가져오기 호출을 통해 반환될 값으로 둔다.
rendered text가 selector를 포함하면, element를 result에 추가한다.
result를 데이터로 하여 성공을 반환한다.
태그 이름
전략으로 웹 요소를 찾으려면,
start node를 this로, selector를 인수로 하여
getElementsByTagName()를
호출한 결과로 설정된 데이터를 가진 성공을 반환한다.
XPath 선택자 전략으로 웹 요소를 찾으려면, 다음 단계를 완료해야 한다.
evaluateResult를
selector,
start node,
null,
ORDERED_NODE_SNAPSHOT_TYPE,
및 null을 인수로 하여
evaluate를
호출한 결과로 둔다.
스냅샷은 작업의 원자성을 높이기 위해 사용된다.
index를 0으로 둔다.
length를 evaluateResult에서
"snapshotLength"
속성을 가져온
결과로 둔다. 이것이 XPathException을 throw하면
오류
코드 invalid selector를 가진
오류를 반환하고,
그렇지 않고 이것이 다른 예외를 throw하면
오류
코드 unknown
error를 가진 오류를 반환한다.
result를 빈 NodeList로 둔다.
index가 length보다 작은 동안 반복한다.
node가 요소가 아니면, 오류 코드 invalid selector를 가진 오류를 반환한다.
result를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/element |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
location strategy를 parameters에서
"using"이라는 이름의
속성을
가져온 결과로 둔다.
location strategy가 위치 전략 표에 키워드로 존재하지 않으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
selector를 parameters에서
"value"라는 이름의
속성을
가져온 결과로 둔다.
selector가 undefined이면, 오류 코드 invalid argument를 가진 오류를 반환한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
start node를 session의 현재 브라우징 컨텍스트의 문서 요소로 둔다.
start node가 null이면,
오류 코드 no such
element를 가진
오류를 반환한다.
result를 session, start node, location strategy 및 selector로 찾기를 시도한 결과로 둔다.
result가 비어 있으면, 오류를 오류 코드 no such element와 함께 반환한다. 그렇지 않으면 result의 첫 번째 요소를 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/elements |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
location strategy를 parameters에서
"using"이라는 이름의
속성을
가져온 결과로 둔다.
location strategy가 위치 전략 표에 키워드로 존재하지 않으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
selector를 parameters에서
"value"라는 이름의
속성을
가져온 결과로 둔다.
selector가 undefined이면, 오류 코드 invalid argument를 가진 오류를 반환한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
start node를 session의 현재 브라우징 컨텍스트의 문서 요소로 둔다.
start node가 null이면,
오류 코드 no such
element를 가진
오류를 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/element/{element id}/element |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
location strategy를 parameters에서
"using"이라는 이름의
속성을
가져온 결과로 둔다.
location strategy가 위치 전략 표에 키워드로 존재하지 않으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
selector를 parameters에서
"value"라는 이름의
속성을
가져온 결과로 둔다.
selector가 undefined이면, 오류 코드 invalid argument를 가진 오류를 반환한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
start node를
session 및 URL variables["element id"]로
알려진
요소 가져오기를
시도한
결과로 둔다.
result가 비어 있으면, 오류를 오류 코드 no such element와 함께 반환한다. 그렇지 않으면 result의 첫 번째 요소를 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/element/{element id}/elements |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
location strategy를 parameters에서
"using"이라는 이름의
속성을
가져온 결과로 둔다.
location strategy가 위치 전략 표에 키워드로 존재하지 않으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
selector를 parameters에서
"value"라는 이름의
속성을
가져온 결과로 둔다.
selector가 undefined이면, 오류 코드 invalid argument를 가진 오류를 반환한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
start node를
session 및 URL variables["element id"]로
알려진
요소 가져오기를
시도한
결과로 둔다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/shadow/{shadow id}/element |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
location strategy를
"using"이라는
속성을 가져온 결과로 둔다.
location strategy가 위치 전략 표에 키워드로 존재하지 않으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
selector를
"value"라는
속성을 가져온 결과로 둔다.
selector가 undefined이면, 오류 코드 invalid argument를 가진 오류를 반환한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류 코드 no such window를 가진 오류를 반환한다.
모든 사용자 프롬프트를 처리하고, 그 값이 오류이면 그 값을 반환한다.
start node를
session
및 URL variables["shadow id"]로
알려진 섀도 루트 가져오기를
시도한
결과로 둔다.
result가 비어 있으면, 오류를 오류 코드 no such element와 함께 반환한다. 그렇지 않으면 result의 첫 번째 요소를 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/shadow/{shadow id}/elements |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
location strategy를
"using"이라는
속성을 가져온 결과로 둔다.
location strategy가 위치 전략 표에 키워드로 존재하지 않으면, 오류 코드 invalid argument를 가진 오류를 반환한다.
selector를
"value"라는
속성을 가져온 결과로 둔다.
selector가 undefined이면, 오류 코드 invalid argument를 가진 오류를 반환한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
모든 사용자 프롬프트를 처리하고, 그 값이 오류이면 그 값을 반환한다.
start node를
session 및 URL variables["shadow id"]로
알려진
섀도 루트 가져오기를
시도한
결과로 둔다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/active |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
active element를 session의 현재 브라우징 컨텍스트의 문서 요소의 활성 요소로 둔다.
active element가 null이 아닌 요소이면, session 및 active element에 대한 웹 요소 참조 객체로 설정된 데이터를 가진 성공을 반환한다.
그렇지 않으면, 오류를 오류 코드 no such element와 함께 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/shadow |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
모든 사용자 프롬프트를 처리하고, 그 값이 오류이면 그 값을 반환한다.
element를 session 및 URL variables[element id]로 알려진 요소 가져오기를 시도한 결과로 둔다.
shadow root를 element의 섀도 루트로 둔다.
shadow root가 null이면, 오류를 오류 코드 no such shadow root와 함께 반환한다.
serialized를 session 및 shadow root에 대한 섀도 루트 참조 객체로 둔다.
serialized를 데이터로 하여 성공을 반환한다.
session 및 element가 주어졌을 때 절대 위치를 계산하려면:
rect를
getBoundingClientRect()를
호출하여 반환된 값으로 둔다.
window를 session의 현재 최상위 브라우징 컨텍스트의 연관된 window로 둔다.
(x, y) 쌍을 반환한다.
Node node가 Node other와 같은
트리에 있지 않은지 확인하려면,
다음 하위 단계를 실행한다.
node의
compareDocumentPosition()를
other를 인수로 호출한 결과가
DOCUMENT_POSITION_DISCONNECTED
(1)이면 true를 반환하고,
그렇지 않으면 false를 반환한다.
element의 컨테이너는 다음과 같다.
option
요소
optgroup
요소
option
요소
요소는 컨테이너를 가지지 않는다.
컨테이너는 요소 자체이다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/selected |
요소가 선택되었는지 여부 명령은
참조된 요소가 선택되었는지 여부를 판단한다.
이 작업은
체크박스 및 라디오 버튼
상태의
input
요소,
또는
option
요소에서만 의미가 있다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 URL variables[element id]로 알려진 요소 가져오기를 시도한 결과로 둔다.
selected를 첫 번째로 매칭되는 문장에 대응하는 값으로 둔다.
type
속성을 가진
input
요소인 경우
element의 checkedness의 결과.
option
요소인 경우
element의 selectedness의 결과.
selected를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/attribute/{name} |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 URL variables의 element id로 알려진 요소 가져오기를 시도한 결과로 둔다.
name을 URL variables["name"]으로 둔다.
element가 name으로
hasAttribute()이면
"true"(문자열),
그렇지 않으면 null.
name으로 이름으로 속성을 가져온 결과.
result를 데이터로 하여 성공을 반환한다.
이 명령의 동작은
[DOM]의 getAttribute()
동작과 다르다는 점에 유의하라.
설정된 불리언 속성의 경우,
DOM에서는 빈 문자열을 반환한다.
이 명령이 문자열로 true를 반환하는 이유는
대부분의 동적 타입 프로그래밍 언어에서 이것이 true로 평가되면서도,
기대되는 타입 정보를 보존하기 때문이다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/property/{name} |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 URL variables의 element id로 알려진 요소 가져오기를 시도한 결과로 둔다.
name을 URL variables["name"]으로 둔다.
property를 element에서 Object.[[GetProperty]](name)를 호출한 결과로 둔다.
result를
property가 undefined가 아니면 property의 값으로,
그렇지 않으면 null로 둔다.
result를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/css/{property name} |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를
URL variables["element id"]로
알려진
요소 가져오기를
시도한
결과로 둔다.
computed value를 첫 번째로 매칭되는 조건의 결과로 둔다.
xml"이 아닌 경우
property name"] 매개변수의
계산값.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/text |
텍스트를 처리할 때,
공백은
Unicode Character Database에서
Unicode 문자 프로퍼티
"WSpace=Y" 또는 "WS"를 가진 문자로 정의된다.
[UAX44]
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 URL variables[element id]로 알려진 요소 가져오기를 시도한 결과로 둔다.
rendered text를
bot.dom.getVisibleText를
this 값으로 하여
Function.[[Call]](null,
element)의
결과와 정확히 같은 결과를 내는
구현별 단계를 수행한 결과로 둔다.
rendered text를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/name |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를
URL variables["element id"]로
알려진
요소 가져오기를
시도한
결과로 둔다.
qualified name을 element의 tagName IDL
속성을 가져온 결과로 둔다.
qualified name을 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/rect |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를
session 및 URL variables["element id"]로
알려진
요소 가져오기를
시도한
결과로 둔다.
coordinates를 session 및 element로 절대 위치를 계산한 결과로 둔다.
rect를 element의 경계 사각형으로 둔다.
body를 다음으로 초기화된 새 JSON Object로 둔다.
body를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/enabled |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 URL variables[element id]로 알려진 요소 가져오기를 시도한 결과로 둔다.
enabled를, session의 현재
브라우징
컨텍스트의
활성 문서의 type이
"xml"이 아니면 true로 초기 설정된 불리언으로 둔다.
그렇지 않으면, enabled를 false로 두고 이 알고리즘의 마지막 단계로 이동한다.
폼 컨트롤이 비활성화되어 있으면 enabled를 false로 설정한다.
enabled를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/computedrole |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를
URL variables["element id"]로
알려진
요소 가져오기를
시도한
결과로 둔다.
role을 element의 WAI-ARIA role을 계산한 결과로 둔다.
role을 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/computedlabel |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session
및 URL variables["element id"]로
알려진 요소 가져오기를
시도한
결과로 둔다.
label을 element의 Accessible Name에 대한 Accessible Name and Description Computation의 결과로 둔다.
label을 데이터로 하여 성공을 반환한다.
요소 상호작용 명령은 폼 컨트롤을 조작하기 위한 고수준 명령 집합을 제공한다. 동작과 달리, 이 명령들은 암묵적으로 요소를 뷰 안으로 스크롤하고 그것이 상호작용 가능 요소인지 검사한다.
일부 재설정 가능 요소는 자체 지우기
알고리즘을 정의한다.
이와 연관된 재설정 알고리즘과 달리,
이러한 알고리즘의 일부로 폼 컨트롤에 이루어진 변경은
사용자에 의해 발생한 변경으로 간주된다
(따라서 예컨대 input 이벤트가 발생한다).
자체 지우기 알고리즘을 정의하지 않은 요소에 대해
지우기 알고리즘이 호출되면,
대신 그 재설정 알고리즘이 호출되어야 한다.
input
요소에 대한 지우기 알고리즘은
dirty value 플래그 및 dirty checkedness
플래그를 false로 되돌리고,
요소의 값을
빈 문자열로 설정하며,
요소가
checked
콘텐츠 속성을 가지면 요소의 checkedness를 true로,
그렇지 않으면 false로 설정하고,
선택된 파일 목록을 비우며,
그 다음
type
속성의 현재 상태가 하나를 정의하는 경우에만
값 정제 알고리즘을 호출하는 것이다.
textarea
요소에 대한 지우기 알고리즘은
dirty value 플래그를 false로 되돌리고,
요소의 raw
value를 빈 문자열로 설정하는 것이다.
output
요소에 대한 지우기 알고리즘은
요소의 값 모드 플래그를 default로 설정한 뒤,
요소의 textContent IDL 속성을
빈 문자열로 설정하는 것이다(따라서 요소의 자식 노드를 지운다).
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/element/{element id}/click |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 element id로 알려진 요소 가져오기를 시도한 결과로 둔다.
element가
파일 업로드 상태인
input
요소이면,
오류를 오류 코드 invalid argument와 함께 반환한다.
element의 컨테이너를 뷰 안으로 스크롤한다.
element의 컨테이너가 여전히 뷰 안에 있지 않으면, 오류를 오류 코드 element not interactable와 함께 반환한다.
element의 컨테이너가 다른 요소에 의해 가려져 있으면, 오류를 오류 코드 element click intercepted와 함께 반환한다.
element에 대해 매칭한다.
option
요소
parent node를 element의 컨테이너로 둔다.
parent node에서 mouseOver 이벤트를 발생시킨다.
parent node에서 mouseMove 이벤트를 발생시킨다.
parent node에서 mouseDown 이벤트를 발생시킨다.
parent node에 대해 포커싱 단계를 실행한다.
element가 비활성화되어 있지 않으면:
previous selectedness를 element의 selectedness와 같게 둔다.
element의 컨테이너가
multiple
속성을 가지면,
그 현재 selectedness의 반대 값으로 설정하여
element의 selectedness 상태를 토글한다.
그렇지 않으면, element의 selectedness 상태를 true로 설정한다.
previous selectedness가 false이면,
parent node에서
change 이벤트를
발생시킨다.
parent node에서 mouseUp 이벤트를 발생시킨다.
input state를 session 및 session의 현재 최상위 브라우징 컨텍스트가 주어졌을 때 입력 상태 가져오기의 결과로 둔다.
actions options를 새 동작 옵션으로 두고, 요소 origin인지 여부 단계는 웹 요소를 나타낸다로, 요소 origin 가져오기 단계는 WebElement origin 가져오기로 설정한다.
input id를 UUID를 생성한 결과로 둔다.
source를 input state 및 "pointer"로
입력 소스
생성의 결과로 둔다.
input state, input id 및 source로 입력 소스를 추가한다.
click point를 element의 뷰 안 중앙점으로 둔다.
pointer move action을
input id, "pointer", 및 "pointerMove"를
인수로 생성된 동작
객체로 둔다.
pointer move action에서
x 프로퍼티를 설정하여
0으로 둔다.
pointer move action에서
y 프로퍼티를 설정하여
0으로 둔다.
pointer move action에서
origin
프로퍼티를 설정하여
element로 둔다.
pointer down action을
input id, "pointer", 및 "pointerDown"를
인수로 생성된 동작
객체로 둔다.
pointer down action에서
button 프로퍼티를 설정하여
0으로 둔다.
pointer up action을
input id, "pointer", 및 "pointerUp"을
인수로 생성된 동작
객체로 둔다.
pointer up action에서
button
프로퍼티를 설정하여
0으로 둔다.
actions를 «pointer move action, pointer down action, pointer up action» 목록으로 둔다.
input state, actions, session의 현재 브라우징 컨텍스트, 및 actions options로 동작 목록을 발송한다.
input state 및 input id로 입력 소스를 제거한다.
사용자 에이전트 이벤트 루프가 이전 단계에서 생성된 DOM 이벤트를 처리할 수 있을 만큼 충분히 진행될 때까지 기다린다.
클릭에 의해 트리거된 모든 탐색이 시작될 수 있도록 구현 정의 단계를 수행한다.
session으로 탐색 완료를 기다리기를 시도한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/element/{element id}/clear |
content editable 요소를 지우려면:
element의 innerHTML
IDL 속성이
빈 문자열이면 아무것도 하지 않고 반환한다.
element에 대해 포커싱 단계를 실행한다.
element의 innerHTML
IDL 속성을
빈 문자열로 설정한다.
element에 대해 언포커싱 단계를 실행한다.
재설정 가능 요소를 지우려면:
empty를 첫 번째로 매칭되는 조건의 결과로 둔다.
element가 제약 검증의 후보이고, 그 제약을 만족하며, empty가 true이면, 이 하위 단계를 중단한다.
element에 대해 포커싱 단계를 호출한다.
element에 대한 지우기 알고리즘을 호출한다.
element에 대해 언포커싱 단계를 호출한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 element id로 알려진 요소 가져오기를 시도한 결과로 둔다.
element가 편집 가능하지 않으면, 오류를 오류 코드 invalid element state와 함께 반환한다.
element를 뷰 안으로 스크롤한다.
timeout을 session의 세션 시간 제한의 암시적 대기 시간 제한으로 둔다.
timer를 새 타이머로 둔다.
timeout이 null이 아니면:
timer와 timeout으로 타이머를 시작한다.
element가 상호작용 가능해지거나, timer의 timeout fired flag가 설정될 때까지, 둘 중 먼저 발생하는 것을 기다린다.
element가 상호작용 가능하지 않으면, 오류를 오류 코드 element not interactable와 함께 반환한다.
첫 번째로 매칭되는 문장의 하위 단계를 실행한다.
재설정 가능 요소를 지우기 단계를 호출한다.
content editable 요소를 지우기 단계를 호출한다.
오류를 오류 코드 invalid element state와 함께 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/element/{element id}/value |
요소 키 전송 명령은 폼 컨트롤 요소를 뷰 안으로 스크롤한 다음, 제공된 키를 요소에 보낸다. 요소가 키보드 상호작용 가능하지 않은 경우, element not interactable 오류가 반환된다.
타이핑 불가능 폼 컨트롤은
그
type
속성 상태로 인해,
가상이든 물리적이든 기본 입력 메커니즘이 키보드를 통한 방식이 아닌
input
요소이다.
타이핑 불가능 폼 컨트롤은
사용자 에이전트가 텍스트 입력 컨트롤이 아닌 다른 것으로 렌더링하는
폼 컨트롤 요소를 가리킨다.
컬러 휠로 표시되는
color 상태의
input
요소를 대상으로 할 때,
그것과의 상호작용은
동작으로 키 에뮬레이션을 사용해 타이핑하는 대신
시뮬레이션된다.
타이핑 불가능 폼
컨트롤의 다른 예로는
시스템 네이티브 위젯을 통해 상호작용하는 폼 컨트롤이 있으며,
예를 들면
select
요소의 스크롤되는 옵션 목록과
비데스크톱 기기에서 number 상태인
input
요소의 숫자 키패드가 있다.
입력에 사용되는 키 입력 소스는 U+E000 (NULL)인 null 키를 보내어 “타이핑” 중간에 지워질 수 있다.
input state, input id, source, undo actions, 및 browsing context가 주어졌을 때 수정자 키 상태를 지우려면:
source가 키 입력 소스가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
actions options를 새 동작 옵션으로 두고, 요소 origin인지 여부 단계는 웹 요소를 나타낸다로, 요소 origin 가져오기 단계는 WebElement origin 가져오기로 설정한다.
undo actions의 사전식으로 정렬된 키 안의 각 entry key에 대해:
action을 entry key 키와 같은 undo actions의 값으로 둔다.
action이
타입 "key" 및 서브타입 "keyUp"을 가진
동작 객체가 아니면,
오류를 오류
코드 invalid
argument와 함께 반환한다.
actions를 «action» 목록으로 둔다.
input state, actions, browsing context, 및 동작 옵션으로 동작 목록을 발송한다.
확장 그래핌 클러스터는 단일 유니코드 코드 포인트로 구성되고 code가 undefined가 아니면 타이핑 가능이다.
keyboard의 shifted
상태는 keyboard의 shift 프로퍼티 값이다.
input state, input id, source, text, 및 browsing context가 주어졌을 때 타이핑 가능한 문자열에 대한 이벤트를 발송하려면:
actions options를 새 동작 옵션으로 두고, 요소 origin인지 여부 단계는 웹 요소를 나타낸다로, 요소 origin 가져오기 단계는 WebElement origin 가져오기로 설정한다.
global key state를 input state로 전역 키 상태 가져오기의 결과로 둔다.
char가 shifted 문자이고, source의 shifted 상태가 false이면:
action을 input id, "key", 및
"keyDown"으로 생성된 동작 객체로 두고,
그 value 프로퍼티를
U+E008 ("left shift")로 설정한다.
actions를 «action» 목록으로 둔다.
input state, actions, 및 browsing context로 동작 목록을 발송한다.
char가 shifted 문자가 아니고 source의 shifted 상태가 true이면:
action을 input id, "key", 및
"keyUp"으로 생성된 동작 객체로 두고,
그 value 프로퍼티를
U+E008 ("left shift")로 설정한다.
tick actions를 «action» 목록으로 둔다.
input state, actions, browsing context, 및 actions options로 동작 목록을 발송한다.
keydown action을
input id, "key",
및 "keyDown"을 인수로 생성된 동작 객체로 둔다.
keydown
action의 value 프로퍼티를 char로 설정한다.
keyup action을
subtype 프로퍼티가 "keyUp"으로 변경된
keydown action의 복사본으로 둔다.
actions를 «keydown action, keyup action» 목록으로 둔다.
input state, actions, browsing context, 및 actions options로 동작 목록을 발송한다.
type 및 cluster, 그리고 browsing context가 주어졌을 때 composition 이벤트를 발송해야 하는 경우, 원격 엔드는 [UI-EVENTS]의 요구사항에 따라 composition 이벤트를 보내고, 지정된 프로퍼티를 가진 다음 이벤트를 생성하는 것과 동등한 구현별 동작 발송 단계 수행을 browsing context에서 해야 한다.
composition event:
| 속성 | 값 |
|---|---|
type |
type |
data |
cluster |
input state, input id, source, text, browsing context, 및 actions options가 주어졌을 때 문자열에 대한 동작을 발송하려면:
clusters를 text를 확장 그래핌 클러스터로 나누어 생성된 배열로 둔다.
undo actions를 빈 map으로 둔다.
current typeable text를 빈 목록으로 둔다.
clusters 안의 인덱스 프로퍼티에 대응하는 각 cluster에 대해 첫 번째로 매칭되는 문장의 하위 단계를 실행한다.
input state, input id, source, current typeable text, 및 browsing context로 타이핑 가능한 문자열에 대한 이벤트를 발송한다. current typeable text를 비운다.
input state, input id, source, undo actions 및 browsing context로 수정자 키 상태를 지우기를 시도한다.
undo actions를 지운다.
input state, input id, source, current typeable text, 및 browsing context로 타이핑 가능한 문자열에 대한 이벤트를 발송한다.
current typeable text를 비운다.
keydown action을
input id,
"key", 및 "keyDown"을 인수로 생성된
동작 객체로 둔다.
keydown
action의 value 프로퍼티를 cluster로 설정한다.
actions를 «keydown action» 목록으로 둔다.
input state, actions, browsing context, 및 actions options로 동작 목록을 발송한다.
undo actions에
키가 cluster이고 값이
subtype 프로퍼티가 "keyUp"으로 수정된
keydown
action의 복사본인 항목을 추가한다.
cluster를 current typeable text에 추가한다.
input state, input id, source, current typeable text, 및 browsing context로 타이핑 가능한 문자열에 대한 이벤트를 발송한다.
current typeable text를 비운다.
인수 "compositionstart", undefined,
및 browsing context로
composition event를
발송한다.
인수
"compositionupdate", cluster,
및 browsing context로
composition event를
발송한다.
인수
"compositionend", cluster,
및 browsing context로
composition event를
발송한다.
input state, input id 및 source, current typeable text, 및 browsing context로 타이핑 가능한 문자열에 대한 이벤트를 발송한다.
input state, input id, source, undo actions, 및 browsing context로 수정자 키 상태를 지우기를 시도한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
text를 parameters에서
"text"라는 이름의
속성을 가져온 결과로 둔다.
text가 String이 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를 session 및 URL variables[element id]로 알려진 요소 가져오기를 시도한 결과로 둔다.
file을, element가
파일 업로드 상태인
input
요소이면 true로, 그렇지 않으면 false로 둔다.
file이 false이거나 세션의 엄격한 파일 상호작용 가능성이 true이면 다음 하위 단계를 실행한다:
element를 뷰 안으로 스크롤한다.
timeout을 session의 세션 시간 제한의 암시적 대기 시간 제한으로 둔다.
timer를 새 타이머로 둔다.
timeout이 null이 아니면:
timer 및 timeout으로 타이머를 시작한다.
element가 키보드 상호작용 가능해지거나, timer의 timeout fired flag가 설정될 때까지, 둘 중 먼저 발생하는 것을 기다린다.
element가 키보드 상호작용 가능하지 않으면, 오류를 오류 코드 element not interactable와 함께 반환한다.
첫 번째로 매칭되는 조건의 하위 단계를 실행한다.
files를 text를
개행(\n) 문자에서 분할한 결과로 둔다.
files의 길이가 0이면, 오류를 오류 코드 invalid argument와 함께 반환한다.
multiple을
element에서 "multiple"로
hasAttribute()를
호출한 결과와 같게 둔다.
multiple이 false이고
files의 길이가 1과 같지 않으면,
오류를 오류 코드 invalid argument와 함께 반환한다.
사용자가 제공한 각 파일이 존재하는지 검증한다. 존재하지 않는 것이 있으면, 오류를 오류 코드 invalid argument와 함께 반환한다.
input
요소의 선택된
파일을 설정하는 것과 동등한
구현별 단계를 완료한다.
multiple이 true이면
files는 element의 선택된 파일에 추가된다.
element에서 다음 이벤트를 순서대로 발생시킨다:
element가 value라는 이름의
own property를 가지지 않으면,
오류를 오류
코드 element
not interactable와 함께 반환한다.
element가 변경 가능하지 않으면, 오류를 오류 코드 element not interactable와 함께 반환한다.
element에서 value
프로퍼티를 설정하여
text로 둔다.
element가 bad input을 겪고 있으면, 오류를 오류 코드 invalid argument와 함께 반환한다.
input state를 session 및 session의 현재 최상위 브라우징 컨텍스트로 입력 상태 가져오기의 결과로 둔다.
input id를 UUID를 생성한 결과로 둔다.
source를 input state 및 "key"로
입력
소스 생성의 결과로 둔다.
input state, input id 및 source로 입력 소스를 추가한다.
input state, input id, 및 source, text, 및 session의 현재 브라우징 컨텍스트를 인수로 하여 문자열에 대한 동작을 발송한다.
input state 및 input id로 입력 소스를 제거한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/source |
페이지 소스 가져오기 명령은 session의 현재 브라우징 컨텍스트의 활성 문서의 DOM을 문자열로 직렬화한 것을 반환한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
source를
require well-formed 플래그에 true를 제공하여,
유일한 자식이 문서 요소인 가상의 노드에 대해
fragment 직렬화 알고리즘을 호출한
결과로 둔다. 이로 인해 예외가 throw되면, source를 null로 둔다.
source가 null이면,
session의 현재 브라우징
컨텍스트의 활성 문서를
문자열로 직렬화한
결과를 source로 둔다.
source를 데이터로 하여 성공을 반환한다.
컬렉션은 Iterable 인터페이스를 구현하고, 다음 중 하나인 Object이다.
toString own property의 초기값이
"Arguments"
Array의 인스턴스
DOMTokenList의 인스턴스
FileList의 인스턴스
HTMLAllCollection의 인스턴스
HTMLCollection의 인스턴스
HTMLFormControlsCollection의
인스턴스
HTMLOptionsCollection의
인스턴스
NodeList의 인스턴스
session, value 및 선택적 인수 seen이 주어졌을 때 JSON 역직렬화를 수행하려면, 원격 엔드는 다음 단계를 실행해야 한다.
seen이 제공되지 않았으면, seen을 빈 List로 둔다.
아래에서 첫 번째로 적절한 단계로 이동한다.
value에 대해 매칭한다.
session 및 value가 주어졌을 때 JSON 복제를 수행하려면, session, value 및 빈 List로 내부 JSON 복제의 결과를 반환한다.
session, value 및 seen이 주어졌을 때 내부 JSON 복제를 수행하려면, value에 대해 매칭하여 첫 번째로 매칭되는 문장의 값을 반환한다.
null
value를 데이터로 하여 성공을 반환한다.
Element의 인스턴스
element가 stale이면, 오류를 오류 코드 stale element reference와 함께 반환한다.
그렇지 않으면:
reference를 session 및 value에 대한 웹 요소 참조 객체로 둔다.
reference를 데이터로 하여 성공을 반환한다.
ShadowRoot의 인스턴스
shadow root가 분리되어 있으면, 오류를 오류 코드 detached shadow root와 함께 반환한다.
그렇지 않으면:
reference를 session 및 value에 대한 섀도 루트 참조 객체로 둔다.
reference를 데이터로 하여 성공을 반환한다.
WindowProxy 객체
value 안의 WindowProxy 객체의
연관된 브라우징 컨텍스트가
파괴되었으면,
오류를
오류 코드 stale
element reference와 함께 반환한다.
그렇지 않으면:
reference를 value에 대한
WindowProxy 참조
객체로 둔다.
reference를 데이터로 하여 성공을 반환한다.
toJSON"이라는 이름의
Function을 가진 경우
toJSON에 대해 value를 this 값으로 하여
Function.[[Call]](toJSON)가 반환한 값으로
성공을
반환한다.
result를 session, value 및 seen과, clone algorithm으로서 내부 JSON 복제를 사용하여 객체 복제한 것으로 둔다.
session, value, seen, 및 clone algorithm이 주어졌을 때 객체를 복제하려면:
value가 seen 안에 있으면, 오류를 오류 코드 javascript error와 함께 반환한다.
value를 seen에 추가한다.
result를 value에 대해 매칭한 첫 번째로 매칭되는 문장의 값으로 둔다.
value 안의 각 열거 가능한 프로퍼티에 대해 다음 하위 단계를 실행한다.
name을 그 프로퍼티의 이름으로 둔다.
source property value를 value에서 name이라는 이름의 프로퍼티를 가져온 결과로 둔다. 이 작업으로 스크립트가 실행되고 그 스크립트가 오류를 throw하면, 오류를 오류 코드 javascript error와 함께 반환한다.
cloned property result를 session, source property value 및 seen으로 clone algorithm을 호출한 결과로 둔다.
cloned property result가 성공이면, result의 프로퍼티를 이름 name 및 cloned property result의 데이터와 같은 값으로 설정한다.
그렇지 않으면, cloned property result를 반환한다.
seen의 마지막 요소를 제거한다.
인수 parameters를 사용해 요청에서 스크립트 인수를 추출해야 할 때, 구현은 다음을 해야 한다.
script를 parameters에서
"script"라는 이름의
프로퍼티를 가져온
결과로 둔다.
script가 String이 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
args를 parameters에서
"args"라는 이름의
프로퍼티를 가져온
결과로 둔다.
args가 Array가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
arguments를 session 및 args로 JSON 역직렬화한 것으로 둔다.
script 및 arguments를 데이터로 하여 성공을 반환한다.
함수 본문을 실행하는 규칙은 다음과 같다. 이 알고리즘은 ECMAScript 완료 레코드를 반환한다.
이 알고리즘 중 어느 시점에서든 사용자 프롬프트가 나타나면,
즉시 Completion { [[Type]]: normal, [[Value]]: null,
[[Target]]: empty }를 반환하되,
이 알고리즘의 다른 단계는 병렬로 계속 실행한다.
window를 session의 현재 브라우징 컨텍스트의 활성 문서의 연관된 window로 둔다.
environment settings를 window의 관련 설정 객체로 둔다.
body가 FunctionBody로 파싱 가능하지 않거나,
파싱이 초기 오류를 감지하면,
Completion { [[Type]]: normal, [[Value]]: null, [[Target]]: empty }를
반환한다.
body가 use strict 지시문을 포함하는 지시문 프롤로그로 시작하면 strict를 true로 두고, 그렇지 않으면 strict를 false로 둔다.
environment settings로 스크립트 실행 준비를 수행한다.
environment settings로 콜백 실행 준비를 수행한다.
function을 다음 인수로 FunctionCreate를 호출한 결과로 둔다.
completion을, function을 this 값으로 하여 Function.[[Call]](window, parameters)의 결과로 둔다.
environment settings로 콜백 실행 후 정리를 수행한다.
environment settings로 스크립트 실행 후 정리를 수행한다.
completion을 반환한다.
위 알고리즘은 특정 요소와 연관되어 있지 않으므로, 문서 CSP 지시문의 대상이 아니다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/execute/sync |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
body 및 arguments를 인수 parameters로 요청에서 스크립트 인수를 추출하기를 시도한 결과로 둔다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
timeout을 session의 세션 시간 제한의 스크립트 시간 제한으로 둔다.
timer를 새 타이머로 둔다.
timeout이 null이 아니면:
timer 및 timeout으로 타이머를 시작한다.
promise를 새 Promise로 둔다.
다음 하위 단계를 병렬로 실행한다.
scriptPromise를 인수 body 및 arguments로 함수 본문 실행을 promise-call한 결과로 둔다.
scriptPromise가 값 v로 이행되면, promise를 값 v로 resolve한다.
scriptPromise가 값 r로 거부되면, promise를 값 r로 reject한다.
promise가 resolve되거나, timer의 timeout fired flag가 설정될 때까지, 둘 중 먼저 발생하는 것을 기다린다.
promise가 아직 pending이고 timer의 timeout fired flag가 설정되어 있으면, 오류를 오류 코드 script timeout과 함께 반환한다.
promise가 값 v로 이행되면, result를 session 및 v로 JSON 복제한 것으로 두고, result를 데이터로 하여 성공을 반환한다.
promise가 이유 r로 거부되면, result를 session 및 r로 JSON 복제한 것으로 두고, 오류를 오류 코드 javascript error 및 데이터 result와 함께 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/execute/async |
비동기 스크립트 실행 명령은 JavaScript가 익명 함수로 실행되도록 한다. 함수의 마지막 인수로 추가 값이 제공된다. 이는 비동기 작업의 완료를 알리기 위해 호출될 수 있는 함수이다. 이 함수에 제공된 첫 번째 인수는 JSON으로 직렬화되어 비동기 스크립트 실행에 의해 반환된다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
body 및 arguments를 인수 parameters로 요청에서 스크립트 인수를 추출하기를 시도한 결과로 둔다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
timeout을 session의 세션 시간 제한의 스크립트 시간 제한으로 둔다.
timer를 새 타이머로 둔다.
timeout이 null이 아니면:
timer 및 timeout으로 타이머를 시작한다.
promise를 새 Promise로 둔다.
다음 하위 단계를 병렬로 실행한다.
resolvingFunctions를 CreateResolvingFunctions(promise)로 둔다.
resolvingFunctions.[[Resolve]]를
arguments에 추가한다.
scriptResult를 인수 body 및 arguments로 함수 본문 실행을 호출한 결과로 둔다.
scriptResult.[[Type]]이 normal이 아니면,
promise를 scriptResult.[[Value]] 값으로 reject하고,
이 단계를 중단한다.
이 명세의 이전 개정판은 제공된 스크립트의 반환값을 인식하지 않았다. 레거시 동작을 보존하기 위해, 반환값은 그것이 "thenable" 객체이거나 이를 판단하는 과정에서 예외가 발생한 경우에만 명령에 영향을 준다.
then을 Get(scriptResult.[[Value]], "then")으로 둔다.
then.[[Type]]이 normal이 아니면,
promise를 then.[[Value]] 값으로 reject하고,
이 단계를 중단한다.
IsCallable(then.[[Type]])이
false이면,
이 단계를 중단한다.
scriptPromise를 Promise 및 scriptResult.[[Value]]로 PromiseResolve한 것으로 둔다.
scriptPromise가 값 v로 이행되면, promise를 값 v로 resolve한다.
scriptPromise가 값 r로 거부되면, promise를 값 r로 reject한다.
promise가 resolve되거나, timer의 timeout fired flag가 설정될 때까지, 둘 중 먼저 발생하는 것을 기다린다.
promise가 아직 pending이고 timer의 timeout fired flag가 설정되어 있으면, 오류를 오류 코드 script timeout과 함께 반환한다.
promise가 값 v로 이행되면, result를 session 및 v로 JSON 복제한 것으로 두고, result를 데이터로 하여 성공을 반환한다.
promise가 이유 r로 거부되면, result를 session 및 r로 JSON 복제한 것으로 두고, 오류를 오류 코드 javascript error 및 데이터 result와 함께 반환한다.
Actions API는 웹 브라우저에 가상화된 장치 입력을 제공하기 위한 저수준 인터페이스를 제공한다. 개념적으로, Actions 명령은 시간을 일련의 tick으로 나눈다. 로컬 엔드는 각 tick 동안 각 입력 장치의 상태 변화가 있다면 이에 대응하는 일련의 동작을 보낸다. 예를 들어, 키를 누르는 것은 단일 키 입력 장치와 두 개의 tick으로 구성된 동작 시퀀스로 표현되며, 첫 번째는 keyDown 동작을 포함하고, 두 번째는 keyUp 동작을 포함한다. 반면 핀치 줌 입력은 세 개의 tick과 touch 타입의 두 포인터 입력 장치로 구성된 동작 시퀀스로 표현되며, 각각 pointerDown, 이어서 pointerMove, 그리고 pointerUp 동작 시퀀스를 수행한다.
동작 발송의 구성은 동작 옵션 객체에 의해 제어된다. 이는 struct이며, 요소 origin인지 여부라는 이름의 필드를 가진다. 이는 프로토콜 객체가 요소 origin을 나타내는지 검증하는 단계 집합이다. 또한 요소 origin 가져오기도 가지며, 이는 요소를 역직렬화하는 데 사용되는 단계 집합이다.
session, origin 및 browsing context가 주어졌을 때 WebElement origin을 가져오려면:,
Assert: browsing context는 현재 브라우징 컨텍스트이다.
element를 session 및 origin으로 알려진 요소 가져오기를 시도한 결과와 같게 둔다.
element를 데이터로 하여 성공을 반환한다.
입력 소스는 입력 이벤트를 제공하는 가상 장치이다. 각 입력 소스는 입력 소스의 타입에 특정한 struct로 표현된다. 각 입력 소스는 입력 상태 map 안의 키로 저장되는 입력 id를 가진다.
input state, type 및 선택적 subtype이 주어졌을 때 입력 소스를 생성하려면:
type의 첫 번째로 매칭되는 값에 대응하는 하위 단계를 실행한다.
none"
key"
pointer"
wheel"
null 입력 소스는 특정 물리적 장치와 연관되지 않은 입력 소스이다. null 입력 소스에는 타입 특정 항목이 없고, 다음 동작을 지원한다.
| 동작 | 비규범적 설명 |
|---|---|
| pause | tick의 지속 시간을 지정하기 위해 정수 인수와 함께 사용되거나, 특정 tick 동안 입력 소스가 아무것도 하지 않음을 나타내는 자리표시자로 사용된다. |
null 입력 소스를 생성하려면, 새 null 입력 소스를 반환한다.
키 입력 소스는 키보드 타입 장치와 연관된 입력 소스이다.
키 입력 소스는 다음 항목을 가진다.
| 항목 | 비규범적 설명 | 기본값 |
|---|---|---|
| pressed | 현재 눌린 키를 나타내는 문자열 집합. | 빈 set |
| alt | alt 수정자가 눌려 있는지를 나타내는 boolean. | False |
| ctrl | ctrl 수정자가 눌려 있는지를 나타내는 boolean. | False |
| meta | meta 수정자가 눌려 있는지를 나타내는 boolean. | False |
| shift | shift 수정자가 눌려 있는지를 나타내는 boolean. | False |
키 입력 소스는 null 입력 소스와 같은 pause 동작에 더해 다음 동작을 지원한다.
| 동작 | 비규범적 설명 |
|---|---|
| keyDown | 특정 키가 눌린 채 유지되어야 함을 나타내는 데 사용된다. |
| keyUp | 눌린 키가 해제되어야 함을 나타내는 데 사용된다. |
키 입력 소스를 생성하려면, 항목들이 기본값으로 초기화된 새 키 입력 소스를 반환한다.
포인터 입력 소스는 포인터 타입 입력 장치와 연관된 입력 소스이다.
포인터 입력 소스는 다음 항목을 가진다.
| 항목 | 비규범적 설명 | 기본값 |
|---|---|---|
| subtype | 포인팅 장치의 타입. 이는 "mouse",
"pen", 또는 "touch"일 수 있다.
|
|
| pointerId | 포인팅 장치의 숫자 id. 이는 양의 정수이며, 값 0과 1은 mouse 타입 포인터를 위해 예약되어 있다. | |
| pressed | 현재 눌린 포인터 버튼을 나타내는 부호 없는 정수 집합. | 빈 set |
| x | 뷰포트 좌표에서 포인터 x 위치를 나타내는 부호 없는 정수. | 0 |
| y | 뷰포트 좌표에서 포인터 y 위치를 나타내는 부호 없는 정수. | 0 |
포인터 입력 소스는 null 입력 소스와 같은 pause 동작에 더해 다음 동작을 지원한다.
| 동작 | 비규범적 설명 |
|---|---|
| pointerDown | 포인터가 어떤 방식으로 눌려야 함을 나타내는 데 사용된다. 예를 들어 (마우스의 경우) 버튼을 누른 채 유지하거나, (touch 또는 pen 장치의 경우) 활성 표면에 접촉하는 것이다. |
| pointerUp | 포인터가 어떤 방식으로 해제되어야 함을 나타내는 데 사용된다. 예를 들어 마우스 버튼을 놓거나, pen 또는 touch 장치를 활성 표면에서 떼어내는 것이다. |
| pointerMove | 포인터가 활성(눌린) 상태이든 비활성 상태이든 이동해야 하는 화면상의 위치를 나타내는 데 사용된다. |
| pointerCancel | 포인터 동작을 취소하는 데 사용된다. |
input state 및 subtype이 주어졌을 때 포인터 입력 소스를 생성하려면, subtype이 subtype으로 설정되고, pointerId가 input state 및 subtype으로 포인터 id 가져오기로 설정되며, 나머지 항목들이 기본값으로 설정된 새 포인터 입력 소스를 반환한다.
휠 입력 소스는 휠 타입 입력 장치와 연관된 입력 소스이다. 휠 입력 소스에는 타입 특정 항목이 없으며, null 입력 소스와 같은 pause 동작에 더해 다음 동작을 지원한다.
| 동작 | 비규범적 설명 |
|---|---|
| scroll | 페이지를 아래, 위, 오른쪽 또는 왼쪽으로 스크롤하기 위해 스크롤 휠이 아래, 위, 오른쪽 또는 왼쪽으로 굴러감을 나타내는 데 사용된다. |
휠 입력 소스를 생성하려면, 새 휠 입력 소스를 반환한다.
입력 상태는 입력 소스 컬렉션의 전체 상태를 나타낸다. 입력 상태는 다음 항목을 가진다.
session 및 browsing context가 주어졌을 때 입력 상태를 가져오려면:
Assert: browsing context는 최상위 브라우징 컨텍스트이다.
input state map을 session의 브라우징 컨텍스트 입력 상태 map으로 둔다.
input state map이 browsing context를 포함하지 않으면, input state map[browsing context]을 입력 상태 생성으로 설정한다.
input state map[browsing context]을 반환한다.
session 및 browsing context가 주어졌을 때 입력 상태를 재설정하려면:
Assert: browsing context는 최상위 브라우징 컨텍스트이다.
input state map을 session의 브라우징 컨텍스트 입력 상태 map으로 둔다.
input state map[browsing context]이 존재하면, input state map[browsing context]을 제거한다.
입력 상태를 생성하려면:
input state, input id 및 source가 주어졌을 때 입력 소스를 추가하려면:
input state map을 input state의 입력 상태 map으로 둔다.
input state 및 input id가 주어졌을 때 입력 소스를 제거하려면:
Assert: input state의 입력 취소 목록 안의 어떤 항목도 input id와 같은 id를 가지지 않는다.
input state map을 input state의 입력 상태 map으로 둔다.
input state 및 input id가 주어졌을 때 입력 소스를 가져오려면:
input state map을 input state의 입력 상태 map으로 둔다.
input state map[input id]이 존재하면, input state map[input id]을 반환한다.
undefined를 반환한다.
input state, type, input id, 및 선택적 subtype이 주어졌을 때 입력 소스를 가져오거나 생성하려면:
source를 input state 및 input id로 입력 소스 가져오기를 한 결과로 둔다.
source가 undefined가 아니고 source의 type이 type과 같지 않거나, source가 포인터 입력 소스이면, 오류를 오류 코드 invalid argument와 함께 반환한다.
source가 undefined이면, source를 input state 및 type으로 입력 소스 생성을 시도한 결과로 설정한다.
source를 데이터로 하여 success를 반환한다.
전역 키 상태는 pressed, altKey, ctrlKey, metaKey, shiftKey 항목을 가진 struct이다.
input state가 주어졌을 때 전역 키 상태를 가져오려면:
input state map을 input state의 입력 상태 map으로 둔다.
sources를 input state map으로 값 가져오기의 결과로 둔다.
key state를 pressed가 빈
set으로 설정되고, altKey, ctrlKey, metaKey,
및 shiftKey가 false로 설정된 새 전역 키 상태로 둔다.
sources 안의 각 source에 대해:
source가 키 입력 소스가 아니면, 이 루프의 첫 번째 단계로 계속한다.
key state의 pressed 항목을
그 현재 값과 source의 pressed 항목의 합집합으로 설정한다.
source의 alt 항목이 true이면,
key state의 altKey 항목을 true로 설정한다.
source의 ctrl 항목이 true이면,
key state의 ctrlKey 항목을 true로 설정한다.
source의 meta 항목이 true이면,
key state의 metaKey 항목을 true로 설정한다.
source의 shift 항목이 true이면,
key state의 shiftKey 항목을 true로 설정한다.
key state를 반환한다.
input state 및 subtype이 주어졌을 때 포인터 id를 가져오려면:
tick은 동작을 수행할 수 있는 시간의 기본 단위이다. tick 동안, 각 입력 소스에는 할당된 동작 — noop pause 동작일 수도 있음 — 이 있으며, 이는 사용자 에이전트 내부 상태에 변화를 일으킬 수 있고, 결국 페이지에서 DOM 이벤트가 발생되게 할 수 있다. 다음 tick은 사용자 에이전트가 현재 tick에서 생성된 모든 DOM 이벤트를 처리할 기회를 가진 뒤에 시작된다.
비동기적으로 대기한다는 것은 브라우저가 이벤트 루프를 계속 처리하도록 허용하면서 어떤 일이 발생하기를 기다리는 것을 의미한다.
가장 낮은 수준에서, 동작의 행위는 원격 엔드가 실제 입력 장치를 사용할 때의 행위를 최대한 가깝게 모방하도록 의도되며, 구현 전략은 예컨대 합성된 이벤트를 브라우저 이벤트 루프에 주입하는 것을 포함할 수 있다. 따라서 동작을 발송하는 단계는 필연적으로 구현별 영역에 이르게 된다. 그러나 구현 간에 일관되어야 하는 특정 콘텐츠 관찰 가능 효과가 있다. 이를 수용하기 위해, 명세는 원격 엔드가 브라우징 컨텍스트 context와 이벤트 목록 및 그 프로퍼티에 대해 구현별 동작 발송 단계를 수행할 것을 요구한다. 이러한 단계는 context에서 주어진 입력 장치 조작을 수행하는 것과 동등해야 하며, 이벤트 목록의 항목에 대응하는 신뢰된 이벤트가 발송되도록 해야 한다.
요청에서 동작 시퀀스를 추출하는 알고리즘은 동작 시퀀스를 나타내는 JSON Object를 받아, 입력을 검증하고, 입력 JSON의 전치인 데이터 구조를 반환하여, 단일 tick에서 수행될 동작들이 함께 그룹화되도록 한다.
source, x offset, y offset, origin, browsing context, 및 actions options가 주어졌을 때 origin에 상대적인 좌표를 가져오려면:
origin의 첫 번째로 매칭되는 값의 하위 단계를 실행한다.
viewport"
x를 x offset과 같게 하고, y를 y offset과 같게 둔다.
pointer"
start x를 source의 x
프로퍼티와 같게 둔다.
start y를 source의 y
프로퍼티와 같게 둔다.
x를 start x + x offset과 같게 하고, y를 start y + y offset과 같게 둔다.
element를 origin 및 browsing context로 actions options의 요소 origin 가져오기 단계를 실행하기를 시도한 결과로 둔다.
element가 null이면, 오류를 오류 코드 no such element와 함께 반환한다.
x element 및 y element를 element의 뷰 안 중앙점을 계산한 결과로 둔다.
x를 x element + x offset과 같게 하고, y를 y element + y offset과 같게 둔다.
(x, y)를 반환한다.
input state, parameters, 및 actions options가 주어졌을 때 동작 시퀀스를 추출하려면:
actions를 parameters에서
"actions"라는 이름의 프로퍼티를
가져온 결과로 둔다.
actions가 undefined이거나 Array가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
actions by tick을 빈 List로 둔다.
actions 안의 인덱스 프로퍼티에 대응하는 각 값 action sequence에 대해:
source actions를 input state, action sequence, 및 actions options가 주어졌을 때 입력 소스 동작 시퀀스 처리를 시도한 결과로 둔다.
source actions 안의 각 action에 대해:
actions by tick를 데이터로 하여 성공을 반환한다.
input state, action sequence, 및 actions options가 주어졌을 때 입력 소스 동작 시퀀스를 처리해야 하는 경우, 원격 엔드는 다음을 해야 한다.
type을 action sequence에서
"type"이라는 이름의 프로퍼티를 가져온
결과로 둔다.
type이
"key", "pointer",
"wheel", 또는 "none"이 아니면,
오류를
오류 코드 invalid
argument와 함께 반환한다.
id를
action sequence에서 "id" 프로퍼티를
가져온 결과로 둔다.
id가 undefined이거나 String이 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
type이 "pointer"와 같으면,
parameters data를 action sequence에서
"parameters" 프로퍼티를 가져온 결과로 둔다.
그런 다음 parameters를
parameters data를 인수로 하여
포인터 매개변수 처리를
시도한 결과로
둔다.
source를 input state, type 및 id가 주어졌을 때 입력 소스를 가져오거나 생성하기를 시도한 결과로 둔다.
parameters가 undefined가 아니고,
그 pointerType 프로퍼티가
source의 subtype 프로퍼티와 같지 않으면,
오류를
오류 코드 invalid
argument와 함께 반환한다.
action items를
action sequence에서 "actions"라는 이름의
프로퍼티를
가져온 결과로 둔다.
action items가 Array가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
actions를 새 목록으로 둔다.
action items 안의 각 action item에 대해:
action item이 Object가 아니면 오류를 오류 코드 invalid argument와 함께 반환한다.
type이 "none"이면,
action을 id 및
action item 매개변수로
null 동작
처리를 시도한 결과로 둔다.
그렇지 않고, type이 "key"이면
action을 id 및
action item 매개변수로
키 동작
처리를 시도한 결과로 둔다.
그렇지 않고, type이 "pointer"이면
action을 id,
parameters, action item, 및 actions
options 매개변수로
포인터 동작
처리를 시도한 결과로 둔다.
그렇지 않고, type이 "wheel"이면
action을 id, action item,
및 actions options 매개변수로
휠 동작
처리를 시도한 결과로 둔다.
action을 actions에 추가한다.
actions를 데이터로 하여 성공을 반환한다.
기본 포인터
매개변수는
pointerType 프로퍼티가 mouse로 설정된 객체로 구성된다.
parameters data가 주어졌을 때 포인터 매개변수를 처리하려면:
parameters를 기본 포인터 매개변수로 둔다.
parameters data가 Object가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
pointer type을
parameters data에서 "pointerType"라는 이름의
프로퍼티를 가져온 결과로 둔다.
pointer type이 undefined가 아니면:
pointer type이
"mouse",
"pen",
또는 "touch" 값 중 하나를 가지지 않으면,
오류를 오류
코드 invalid argument와 함께 반환한다.
parameters의 pointerType 프로퍼티를
pointer type으로 설정한다.
parameters를 데이터로 하여 성공을 반환한다.
인수 id, type, 및 subtype으로 구성된 동작 객체는 id 프로퍼티가 id로, type이 type으로, subtype이 subtype으로 설정된 객체이다. 특정 동작 객체에는 이 명세의 다른 알고리즘에 의해 추가 프로퍼티가 더해진다.
id 및 action item이 주어졌을 때 null 동작을 처리하려면:
subtype을 action item에서
"type"라는 이름의 프로퍼티를 가져온
결과로 둔다.
subtype이 "pause"가 아니면,
오류를
오류 코드 invalid
argument와 함께 반환한다.
action을 인수
id,
"none",
및 subtype으로 구성된 동작 객체로 둔다.
result를 action item 및 action 인수로 pause 동작 처리를 시도한 결과로 둔다.
result를 반환한다.
id 및 action item이 주어졌을 때 키 동작을 처리하려면:
subtype을 action item에서
"type"라는 이름의 프로퍼티를 가져온
결과로 둔다.
subtype이
"keyUp",
"keyDown",
또는 "pause" 값 중 하나가 아니면,
오류를
오류 코드 invalid
argument와 함께 반환한다.
action을 인수
id,
"key",
및 subtype으로 구성된 동작 객체로 둔다.
subtype이 "pause"이면,
result를
action item 및 action 인수로
pause
동작 처리를 시도한 결과로 두고,
result를 반환한다.
key를 action item에서
"value"라는 이름의 프로퍼티를 가져온
결과로 둔다.
key가 단일 유니코드 코드 포인트를 포함하는 String이 아니면 또는 그래핌 클러스터? 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 value 프로퍼티를 key로 설정한다.
action을 데이터로 하여 success를 반환한다.
id, parameters, action item, 및 action options가 주어졌을 때 포인터 동작을 처리하려면:
subtype을
action item에서 "type"라는 이름의
프로퍼티를 가져온 결과로 둔다.
subtype이
"pause",
"pointerUp",
"pointerDown",
"pointerMove",
또는 "pointerCancel" 값 중 하나가 아니면,
오류를
오류 코드 invalid
argument와 함께 반환한다.
action을 인수
id,
"pointer",
및 subtype으로 구성된 동작 객체로 둔다.
subtype이 "pause"이면,
result를 action item, action, 및 actions
options 인수로
pause 동작 처리를
시도한
결과로 두고, result를 반환한다.
action의 pointerType 프로퍼티를
parameters의 pointerType 프로퍼티와 같게 설정한다.
subtype이 "pointerUp" 또는 "pointerDown"이면,
action item 및 action 인수로
포인터
up 또는 포인터 down 동작 처리를 수행한다.
이렇게 하는 것이 오류를 결과로 내면, 그 오류를 반환한다.
subtype이 "pointerMove"이면
action item, action, 및 actions
options 인수로
포인터 move 동작 처리를 수행한다.
이렇게 하는 것이 오류를 결과로 내면,
그 오류를 반환한다.
subtype이 "pointerCancel"이면
포인터 cancel 동작 처리.
이렇게 하는 것이 오류를 결과로 내면, 그 오류를 반환한다.
action을 데이터로 하여 성공을 반환한다.
id, action item, 및 actions options가 주어졌을 때 휠 동작을 처리하려면:
subtype을
action item에서 "type"라는 이름의
프로퍼티를 가져온 결과로 둔다.
subtype이
"pause" 값이 아니거나,
"scroll"이면,
오류를
오류 코드 invalid
argument와 함께 반환한다.
action을 인수
id,
"wheel",
및 subtype으로 구성된 동작 객체로 둔다.
subtype이 "pause"이면,
result를 action item 및 action 인수로
pause 동작 처리를
시도한
결과로 두고, result를 반환한다.
duration을 action item에서
"duration"라는 이름의 프로퍼티를 가져온
결과로 둔다.
duration이 undefined가 아니고 duration이 0보다 크거나 같은 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 duration 프로퍼티를
duration으로 설정한다.
origin을 action item에서
origin 프로퍼티를 가져온
결과로 둔다.
origin이 undefined이면
origin을 "viewport"와 같게 둔다.
origin이 "viewport"와 같지 않거나,
origin가 주어졌을 때 actions options의
요소 origin인지 여부 단계가
false를 반환하면, 오류를
오류 코드 invalid
argument와 함께 반환한다.
action의 origin 프로퍼티를
origin으로 설정한다.
x를 action item에서
x 프로퍼티를 가져온
결과로 둔다.
x가 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 x 프로퍼티를 x로 설정한다.
y를 action item에서
y 프로퍼티를 가져온
결과로 둔다.
y가 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 y 프로퍼티를 y로 설정한다.
deltaX를 action item에서
deltaX 프로퍼티를 가져온
결과로 둔다.
deltaX가 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 deltaX 프로퍼티를 deltaX로 설정한다.
deltaY를 action item에서
deltaY 프로퍼티를 가져온
결과로 둔다.
deltaY가 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 deltaY 프로퍼티를 deltaY로 설정한다.
action을 데이터로 하여 성공을 반환한다.
action item 및 action이 주어졌을 때 pause 동작을 처리하려면:
duration을 action item에서
"duration" 프로퍼티를
가져온 결과로 둔다.
duration이 undefined가 아니고 duration이 0보다 크거나 같은 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 duration 프로퍼티를
duration으로 설정한다.
action을 데이터로 하여 success를 반환한다.
action item 및 action이 주어졌을 때 포인터 up 또는 포인터 down 동작을 처리하려면:
button을
action item에서 button 프로퍼티를 가져온 결과로 둔다.
button이 0보다 크거나 같은 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 button 프로퍼티를
button으로 설정한다.
width를
action item에서 width 프로퍼티를 가져온 결과로 둔다.
width가 undefined가 아니고 width가 0보다 크거나 같은 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 width 프로퍼티를
width로 설정한다.
height를
action item에서 height 프로퍼티를 가져온 결과로 둔다.
height가 undefined가 아니고 height가 0보다 크거나 같은 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 height 프로퍼티를
height로 설정한다.
pressure를
action item에서 pressure 프로퍼티를 가져온 결과로 둔다.
pressure가 undefined가 아니고 pressure가 0 이상 1 이하인 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 pressure 프로퍼티를
pressure로 설정한다.
tangentialPressure를
action item에서 tangentialPressure 프로퍼티를 가져온 결과로 둔다.
tangentialPressure가 undefined가 아니고 tangentialPressure가 -1 이상 1 이하인 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 tangentialPressure 프로퍼티를
tangentialPressure로 설정한다.
tiltX를
action item에서 tiltX 프로퍼티를 가져온 결과로 둔다.
tiltX가 undefined가 아니고 tiltX가 -90 이상 90 이하인 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 tiltX 프로퍼티를
tiltX로 설정한다.
tiltY를
action item에서 tiltY 프로퍼티를 가져온 결과로 둔다.
tiltY가 undefined가 아니고 tiltY가 -90 이상 90 이하인 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 tiltY 프로퍼티를
tiltY로 설정한다.
twist를
action item에서 twist 프로퍼티를 가져온 결과로 둔다.
twist가 undefined가 아니고 twist가 0 이상 359 이하인 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 twist 프로퍼티를
twist로 설정한다.
altitudeAngle을
action item에서 altitudeAngle 프로퍼티를 가져온 결과로 둔다.
altitudeAngle이 undefined가 아니고 altitudeAngle이 0 이상 π/2 이하인 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 altitudeAngle 프로퍼티를
altitudeAngle로 설정한다.
azimuthAngle을
action item에서 azimuthAngle 프로퍼티를 가져온 결과로 둔다.
azimuthAngle이 undefined가 아니고 azimuthAngle이 0 이상 2π 이하인 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 azimuthAngle 프로퍼티를
azimuthAngle로 설정한다.
null을 데이터로 하여 success를 반환한다.
action item, action, 및 actions options가 주어졌을 때 포인터 move 동작을 처리하려면:
duration을
action item에서 duration 프로퍼티를 가져온 결과로 둔다.
duration이 undefined가 아니고 duration이 0보다 크거나 같은 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 duration 프로퍼티를
duration으로 설정한다.
origin을
action item에서 origin
프로퍼티를 가져온 결과로 둔다.
origin이 undefined이면
origin을 "viewport"와 같게 둔다.
origin이 "viewport"
또는 "pointer"와 같지 않고, origin이 주어졌을 때 actions options의
요소
origin인지 여부 단계가 false를 반환하면,
오류를
오류 코드 invalid
argument와 함께 반환한다.
action의 origin 프로퍼티를
origin으로 설정한다.
x를
action item에서 x
프로퍼티를 가져온 결과로 둔다.
x가 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 x 프로퍼티를
x로 설정한다.
y를
action item에서 y
프로퍼티를 가져온 결과로 둔다.
y가 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 y 프로퍼티를
y로 설정한다.
width를
action item에서 width 프로퍼티를 가져온 결과로 둔다.
width가 undefined가 아니고 width가 0보다 크거나 같은 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 width 프로퍼티를
width로 설정한다.
height를
action item에서 height 프로퍼티를 가져온 결과로 둔다.
height가 undefined가 아니고 height가 0보다 크거나 같은 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 height 프로퍼티를
height로 설정한다.
pressure를
action item에서 pressure 프로퍼티를 가져온 결과로 둔다.
pressure가 undefined가 아니고 pressure가 0 이상 1 이하인 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 pressure 프로퍼티를
pressure로 설정한다.
tangentialPressure를
action item에서 tangentialPressure 프로퍼티를 가져온 결과로 둔다.
tangentialPressure가 undefined가 아니고 tangentialPressure가 -1 이상 1 이하인 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 tangentialPressure 프로퍼티를
tangentialPressure로 설정한다.
tiltX를
action item에서 tiltX 프로퍼티를 가져온 결과로 둔다.
tiltX가 undefined가 아니고 tiltX가 -90 이상 90 이하인 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 tiltX 프로퍼티를
tiltX로 설정한다.
tiltY를
action item에서 tiltY 프로퍼티를 가져온 결과로 둔다.
tiltY가 undefined가 아니고 tiltY가 -90 이상 90 이하인 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 tiltY 프로퍼티를
tiltY로 설정한다.
twist를
action item에서 twist 프로퍼티를 가져온 결과로 둔다.
twist가 undefined가 아니고 twist가 0 이상 359 이하인 Integer가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 twist 프로퍼티를
twist로 설정한다.
altitudeAngle을
action item에서 altitudeAngle 프로퍼티를 가져온 결과로 둔다.
altitudeAngle이 undefined가 아니고 altitudeAngle이 0 이상 π/2 이하인 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 altitudeAngle 프로퍼티를
altitudeAngle로 설정한다.
azimuthAngle을
action item에서 azimuthAngle 프로퍼티를 가져온 결과로 둔다.
azimuthAngle이 undefined가 아니고 azimuthAngle이 0 이상 2π 이하인 Number가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
action의 azimuthAngle 프로퍼티를
azimuthAngle로 설정한다.
null을 데이터로 하여 success를 반환한다.
동작 발송 알고리즘은 tick별로 그룹화된 동작 목록을 받아, 각 동작이 시퀀스의 적절한 지점에서 실행되도록 한다.
input state가 주어졌을 때 동작 큐 토큰을 기다리려면:
token을 새 고유 식별자로 둔다.
token을 input state의 동작 큐에 enqueue한다.
token이 input state의 동작 큐의 첫 번째 항목이 될 때까지 기다린다.
input state, actions by tick, browsing context, 및 actions options가 주어졌을 때 동작을 발송하려면:
input state로 동작 큐 토큰을 기다린다.
actions result를 input state, actions by tick, browsing context, 및 actions options로 내부 동작 발송을 한 결과로 둔다.
input state의 동작 큐에서 dequeue한다.
Assert: 이는 token을 반환한다.
actions result를 반환한다.
input state, actions by tick, browsing context, 및 actions options가 주어졌을 때 내부 동작 발송을 하려면:
actions by tick 안의 각 항목 tick actions에 대해:
tick duration을 tick actions 인수로 tick 지속 시간 계산을 한 결과로 둔다.
input state, tick actions, tick duration, browsing context, 및 actions options로 tick 동작 발송을 시도한다.
다음 조건이 모두 충족될 때까지 기다린다.
tick 동작 발송 단계의 마지막 호출에서 발생한, 보류 중인 비동기 대기가 없다.
사용자 에이전트 이벤트 루프가 tick 동작 발송 단계의 마지막 호출에 의해 생성된 DOM 이벤트를 처리할 만큼 충분히 실행되었다.
적어도 tick duration 밀리초가 지났다.
null을 데이터로 하여 success를 반환한다.
tick actions가 주어졌을 때 tick 지속 시간을 계산하려면:
max duration을 0으로 둔다.
tick actions 안의 각 action object에 대해:
duration을 undefined로 둔다.
action object의 subtype 프로퍼티가
"pause"로 설정되어 있거나, action object의 type 프로퍼티가
"pointer"로 설정되어 있고 subtype 프로퍼티가
"pointerMove"로 설정되어 있거나, action object의 type
프로퍼티가 "wheel"로 설정되어 있고 subtype 프로퍼티가
"scroll"로 설정되어 있으면, duration을
action object의 duration 프로퍼티와 같게 둔다.
duration이 undefined가 아니고, duration이 max duration보다 크면, max duration을 duration과 같게 둔다.
max duration을 반환한다.
input state, tick actions, tick duration, browsing context, 및 actions options가 주어졌을 때 tick 동작을 발송하려면:
tick actions 안의 각 action object에 대해:
input id를 action object의 id 프로퍼티 값과 같게 둔다.
source type을 action object의 type 프로퍼티 값과 같게 둔다.
source를 input state 및 input id가 주어졌을 때 입력 소스 가져오기를 한 결과로 둔다.
Assert: source는 undefined가 아니다.
global key state를 input state로 전역 키 상태 가져오기를 한 결과로 둔다.
subtype을 action object의 subtype으로 둔다.
algorithm을 다음 표에서 source type 열이 source type이고 subtype 열이 subtype과 같은 행의 dispatch action algorithm 열의 값으로 둔다.
| source type | subtype | 동작 발송 알고리즘 |
|---|---|---|
"none" |
"pause" |
pause 동작 발송 |
"key" |
"pause" |
pause 동작 발송 |
"key" |
"keyDown" |
keyDown 동작 발송 |
"key" |
"keyUp" |
keyUp 동작 발송 |
"pointer" |
"pause" |
pause 동작 발송 |
"pointer" |
"pointerDown" |
pointerDown 동작 발송 |
"pointer" |
"pointerUp" |
pointerUp 동작 발송 |
"pointer" |
"pointerMove" |
pointerMove 동작 발송 |
"pointer" |
"pointerCancel" |
pointerCancel 동작 발송 |
"wheel" |
"pause" |
pause 동작 발송 |
"wheel" |
"scroll" |
scroll 동작 발송 |
subtype이 "keyDown"이면,
subtype 프로퍼티를 "keyUp"으로 변경한
action object의 사본을 input
state의 입력 취소 목록에 추가한다.
subtype이 "pointerDown"이면,
subtype 프로퍼티를 "pointerUp"으로 변경한
action object의 사본을 input
state의 입력 취소 목록에 추가한다.
input state, actions, browsing context, 및 actions options가 주어졌을 때 동작 목록을 발송하려면:
tick actions를 목록 «actions»로 둔다.
actions by tick를 목록 «tick actions»로 둔다.
input state, actions by tick, browsing context, 및 actions options로 동작 발송을 한 결과를 반환한다.
action object, source, global key state, tick duration, browsing context, 및 actions options가 주어졌을 때 pause 동작을 발송하려면:
raw 키 key에 대한 정규화된 키 값은, key가 아래 표에 나타나면 첫 번째 열에 있는 key의 유니코드 코드 포인트를 포함하는 행의 두 번째 열에 있는 문자열 값이고, 그렇지 않으면 key이다.
| key의 코드포인트 | 정규화된 키 값 |
|---|---|
\uE000 |
"Unidentified" |
\uE001 |
"Cancel" |
\uE002 |
"Help" |
\uE003 |
"Backspace" |
\uE004 |
"Tab" |
\uE005 |
"Clear" |
\uE006 |
"Return" |
\uE007 |
"Enter" |
\uE008 |
"Shift" |
\uE009 |
"Control" |
\uE00A |
"Alt" |
\uE00B |
"Pause" |
\uE00C |
"Escape" |
\uE00D |
" " |
\uE00E |
"PageUp" |
\uE00F |
"PageDown" |
\uE010 |
"End" |
\uE011 |
"Home" |
\uE012 |
"ArrowLeft" |
\uE013 |
"ArrowUp" |
\uE014 |
"ArrowRight" |
\uE015 |
"ArrowDown" |
\uE016 |
"Insert" |
\uE017 |
"Delete" |
\uE018 |
";" |
\uE019 |
"=" |
\uE01A |
"0" |
\uE01B |
"1" |
\uE01C |
"2" |
\uE01D |
"3" |
\uE01E |
"4" |
\uE01F |
"5" |
\uE020 |
"6" |
\uE021 |
"7" |
\uE022 |
"8" |
\uE023 |
"9" |
\uE024 |
"*" |
\uE025 |
"+" |
\uE026 |
"," |
\uE027 |
"-" |
\uE028 |
"." |
\uE029 |
"/" |
\uE031 |
"F1" |
\uE032 |
"F2" |
\uE033 |
"F3" |
\uE034 |
"F4" |
\uE035 |
"F5" |
\uE036 |
"F6" |
\uE037 |
"F7" |
\uE038 |
"F8" |
\uE039 |
"F9" |
\uE03A |
"F10" |
\uE03B |
"F11" |
\uE03C |
"F12" |
\uE03D |
"Meta" |
\uE040 |
"ZenkakuHankaku" |
\uE050 |
"Shift" |
\uE051 |
"Control" |
\uE052 |
"Alt" |
\uE053 |
"Meta" |
\uE054 |
"PageUp" |
\uE055 |
"PageDown" |
\uE056 |
"End" |
\uE057 |
"Home" |
\uE058 |
"ArrowLeft" |
\uE059 |
"ArrowUp" |
\uE05A |
"ArrowRight" |
\uE05B |
"ArrowDown" |
\uE05C |
"Insert" |
\uE05D |
"Delete" |
key에 대한 code는, 그러한 행이 존재하는 경우 다음 표의 첫 번째 또는 두 번째 열에 key가 있는 행의 마지막 열에 있는 값이며, 그렇지 않으면 undefined이다.
shifted 문자는 다음 표의 두 번째 열에 나타나는 문자이다.
| 키 | 대체 키 | code |
|---|---|---|
"`" |
"~" |
"Backquote" |
"\" |
"|" |
"Backslash" |
"\uE003" |
|
"Backspace" |
"[" |
"{" |
"BracketLeft" |
"]" |
"}" |
"BracketRight" |
"," |
"<" |
"Comma" |
"0" |
")" |
"Digit0" |
"1" |
"!" |
"Digit1" |
"2" |
"@" |
"Digit2" |
"3" |
"#" |
"Digit3" |
"4" |
"$" |
"Digit4" |
"5" |
"%" |
"Digit5" |
"6" |
"^" |
"Digit6" |
"7" |
"&" |
"Digit7" |
"8" |
"*" |
"Digit8" |
"9" |
"(" |
"Digit9" |
"=" |
"+" |
"Equal" |
"<" |
">" |
"IntlBackslash" |
"a" |
"A" |
"KeyA" |
"b" |
"B" |
"KeyB" |
"c" |
"C" |
"KeyC" |
"d" |
"D" |
"KeyD" |
"e" |
"E" |
"KeyE" |
"f" |
"F" |
"KeyF" |
"g" |
"G" |
"KeyG" |
"h" |
"H" |
"KeyH" |
"i" |
"I" |
"KeyI" |
"j" |
"J" |
"KeyJ" |
"k" |
"K" |
"KeyK" |
"l" |
"L" |
"KeyL" |
"m" |
"M" |
"KeyM" |
"n" |
"N" |
"KeyN" |
"o" |
"O" |
"KeyO" |
"p" |
"P" |
"KeyP" |
"q" |
"Q" |
"KeyQ" |
"r" |
"R" |
"KeyR" |
"s" |
"S" |
"KeyS" |
"t" |
"T" |
"KeyT" |
"u" |
"U" |
"KeyU" |
"v" |
"V" |
"KeyV" |
"w" |
"W" |
"KeyW" |
"x" |
"X" |
"KeyX" |
"y" |
"Y" |
"KeyY" |
"z" |
"Z" |
"KeyZ" |
"-" |
"_" |
"Minus" |
"." |
"." |
"Period" |
"'" |
""" |
"Quote" |
";" |
":" |
"Semicolon" |
"/" |
"?" |
"Slash" |
"\uE00A" |
|
"AltLeft" |
"\uE052" |
|
"AltRight" |
"\uE009" |
|
"ControlLeft" |
"\uE051" |
|
"ControlRight" |
"\uE006" |
|
"Enter" |
"\uE00B" |
|
"Pause" |
"\uE03D" |
|
"MetaLeft" |
"\uE053" |
|
"MetaRight" |
"\uE008" |
|
"ShiftLeft" |
"\uE050" |
|
"ShiftRight" |
" " |
"\uE00D" |
"Space" |
"\uE004" |
|
"Tab" |
"\uE017" |
|
"Delete" |
"\uE010" |
|
"End" |
"\uE002" |
|
"Help" |
"\uE011" |
|
"Home" |
"\uE016" |
|
"Insert" |
"\uE00F" |
|
"PageDown" |
"\uE00E" |
|
"PageUp" |
"\uE015" |
|
"ArrowDown" |
"\uE012" |
|
"ArrowLeft" |
"\uE014" |
|
"ArrowRight" |
"\uE013" |
|
"ArrowUp" |
"\uE00C" |
|
"Escape" |
"\uE031" |
|
"F1" |
"\uE032" |
|
"F2" |
"\uE033" |
|
"F3" |
"\uE034" |
|
"F4" |
"\uE035" |
|
"F5" |
"\uE036" |
|
"F6" |
"\uE037" |
|
"F7" |
"\uE038" |
|
"F8" |
"\uE039" |
|
"F9" |
"\uE03A" |
|
"F10" |
"\uE03B" |
|
"F11" |
"\uE03C" |
|
"F12" |
"\uE019" |
|
"NumpadEqual" |
"\uE01A" |
"\uE05C" |
"Numpad0" |
"\uE01B" |
"\uE056" |
"Numpad1" |
"\uE01C" |
"\uE05B" |
"Numpad2" |
"\uE01D" |
"\uE055" |
"Numpad3" |
"\uE01E" |
"\uE058" |
"Numpad4" |
"\uE01F" |
|
"Numpad5" |
"\uE020" |
"\uE05A" |
"Numpad6" |
"\uE021" |
"\uE057" |
"Numpad7" |
"\uE022" |
"\uE059" |
"Numpad8" |
"\uE023" |
"\uE054" |
"Numpad9" |
"\uE025" |
|
"NumpadAdd" |
"\uE026" |
|
"NumpadComma" |
"\uE028" |
"\uE05D" |
"NumpadDecimal" |
"\uE029" |
|
"NumpadDivide" |
"\uE007" |
|
"NumpadEnter" |
"\uE024" |
|
"NumpadMultiply" |
"\uE027" |
|
"NumpadSubtract" |
key에 대한 키
위치는, 그러한 행이 존재하는 경우 아래 표의 첫 번째 열에
key가 나타나는 행의 마지막 열에 있는 값이며, 그렇지 않으면
0이다.
| key의 코드포인트 | 설명 | 위치 |
|---|---|---|
\uE007 |
Enter | 1 |
\uE008 |
왼쪽 Shift | 1 |
\uE009 |
왼쪽 Control | 1 |
\uE00A |
왼쪽 Alt | 1 |
\uE019 |
Numpad = | 3 |
\uE01A |
Numpad 0 | 3 |
\uE01B |
Numpad 1 | 3 |
\uE01C |
Numpad 2 | 3 |
\uE01D |
Numpad 3 | 3 |
\uE01E |
Numpad 4 | 3 |
\uE01F |
Numpad 5 | 3 |
\uE020 |
Numpad 6 | 3 |
\uE021 |
Numpad 7 | 3 |
\uE022 |
Numpad 8 | 3 |
\uE023 |
Numpad 9 | 3 |
\uE024 |
Numpad * | 3 |
\uE025 |
Numpad + | 3 |
\uE026 |
Numpad , | 3 |
\uE027 |
Numpad - | 3 |
\uE028 |
Numpad . | 3 |
\uE029 |
Numpad / | 3 |
\uE03D |
왼쪽 Meta | 1 |
\uE050 |
오른쪽 Shift | 2 |
\uE051 |
오른쪽 Control | 2 |
\uE052 |
오른쪽 Alt | 2 |
\uE053 |
오른쪽 Meta | 2 |
\uE054 |
Numpad PageUp | 3 |
\uE055 |
Numpad PageDown | 3 |
\uE056 |
Numpad End | 3 |
\uE057 |
Numpad Home | 3 |
\uE058 |
Numpad ArrowLeft | 3 |
\uE059 |
Numpad ArrowUp | 3 |
\uE05A |
Numpad ArrowRight | 3 |
\uE05B |
Numpad ArrowDown | 3 |
\uE05C |
Numpad Insert | 3 |
\uE05D |
Numpad Delete | 3 |
action object, source, global key state, tick duration, browsing context, 및 actions options가 주어졌을 때 keyDown 동작을 발송하려면:
raw key를
action object의 value 프로퍼티와 같게 둔다.
key를 raw key에 대한 정규화된 키 값과 같게 둔다.
source의 pressed 프로퍼티가
key를 포함하면 repeat를 true로 두고, 그렇지 않으면
repeat를 false로 둔다.
code를 raw key에 대한 code로 둔다.
location을 raw key에 대한 키 위치로 둔다.
charCode, keyCode
및 which를, [UI-EVENTS]의 지침에 따라,
102 키 US 키보드에서 키 key 및 위치 location을 가진 키에 적절한
charCode, keyCode
및 which 프로퍼티의 구현별 값으로 둔다.
key가 "Alt"이면,
source의 alt 프로퍼티를 true로 둔다.
key가 "Shift"이면,
source의 shift 프로퍼티를 true로 둔다.
key가 "Control"이면,
source의 ctrl 프로퍼티를 true로 둔다.
key가 "Meta"이면,
source의 meta 프로퍼티를 true로 둔다.
key를 source의 pressed
프로퍼티에 추가한다.
구현별 동작
발송 단계 수행을
[UI-EVENTS]의 요구사항에 따라
키보드에서 키를 누르는 것과 동등하도록 browsing context에서 수행하고,
지정된 프로퍼티를 가진 다음 이벤트를 적절히 생성한다.
이는 항상 적어도 keyDown 이벤트를 포함하는 이벤트를 생성한다.
keyDown
이벤트, 프로퍼티는 다음과 같음:
| 속성 | 값 |
|---|---|
key |
key |
code |
code |
location |
location |
altKey |
source의 alt 프로퍼티
|
shiftKey |
source의 shift 프로퍼티
|
ctrlKey |
source의 ctrl 프로퍼티
|
metaKey |
source의 meta 프로퍼티
|
repeat |
repeat |
isComposing |
false |
charCode |
charCode |
keyCode |
keyCode |
which |
which |
keyPress
이벤트, 프로퍼티는 다음과 같음:
| 속성 | 값 |
|---|---|
key |
key |
code |
code |
location |
location |
altKey |
source의 alt 프로퍼티
|
shiftKey |
source의 shift 프로퍼티
|
ctrlKey |
source의 ctrl 프로퍼티
|
metaKey |
source의 meta 프로퍼티
|
repeat |
repeat |
isComposing |
false |
charCode |
charCode |
keyCode |
keyCode |
which |
which |
action object, source, global key state, tick duration, browsing context, 및 actions options가 주어졌을 때 keyUp 동작을 발송하려면:
raw key를
action object의 value 프로퍼티와 같게 둔다.
key를 raw key에 대한 정규화된 키 값과 같게 둔다.
source의 pressed 항목이
key를 포함하지 않으면, 반환한다.
code를 raw key에 대한 code로 둔다.
location을 raw key에 대한 키 위치로 둔다.
charCode, keyCode
및 which를, [UI-EVENTS]의 지침에 따라,
102 키 US 키보드에서 키 key 및 위치 location을 가진 키에 적절한
charCode, keyCode
및 which 프로퍼티의 구현별 값으로 둔다.
key가 "Alt"이면,
source의 alt 프로퍼티를 false로 둔다.
key가 "Shift"이면,
source의 shift 프로퍼티를 false로 둔다.
key가 "Control"이면,
source의 ctrl 프로퍼티를 false로 둔다.
key가 "Meta"이면,
source의 meta 프로퍼티를 false로 둔다.
sources의 pressed 프로퍼티에서
key를 제거한다.
구현별 동작 발송 단계 수행을 [UI-EVENTS]의 요구사항에 따라 키보드에서 키를 놓는 것과 동등하도록 browsing context에서 수행하고, 지정된 프로퍼티를 가진 적어도 다음 이벤트를 생성한다.
keyup,
프로퍼티는 다음과 같음:
| 속성 | 값 |
|---|---|
key |
key |
code |
code |
location |
location |
altKey |
source의 altKey 프로퍼티 |
shiftKey |
source의 shift 프로퍼티 |
ctrlKey |
source의 ctrl 프로퍼티 |
metaKey |
source의 meta 프로퍼티 |
repeat |
false |
isComposing |
false |
charCode |
charCode |
keyCode |
keyCode |
which |
which |
action object, source, global key state, tick duration, browsing context, 및 actions options가 주어졌을 때 pointerDown 동작을 발송하려면:
pointerType을
action object의 pointerType 프로퍼티와 같게 둔다.
button을
action object의 button 프로퍼티와 같게 둔다.
x를 source의
x 프로퍼티와 같게 둔다.
y를 source의
y 프로퍼티와 같게 둔다.
button을
source의 pressed 프로퍼티에 대응하는 set에 추가하고,
buttons를 그 프로퍼티의 결과 값으로 둔다.
width를 action object의
width 프로퍼티와 같게 둔다.
height를 action object의
height 프로퍼티와 같게 둔다.
pressure를 action object의
pressure 프로퍼티와 같게 둔다.
tangentialPressure를
action object의 tangentialPressure 프로퍼티와 같게 둔다.
tiltX를 action object의
tiltX 프로퍼티와 같게 둔다.
tiltY를 action object의
tiltY 프로퍼티와 같게 둔다.
twist를 action object의
twist 프로퍼티와 같게 둔다.
altitudeAngle을 action object의
altitudeAngle 프로퍼티와 같게 둔다.
azimuthAngle을 action object의
azimuthAngle 프로퍼티와 같게 둔다.
구현별 동작
발송 단계 수행을
[UI-EVENTS] 및
[POINTER-EVENTS]의 요구사항에 따라,
source의 pointerId와 같은 pointerId를 가지고,
타입 pointerType이며,
뷰포트 x 좌표 x, 뷰포트 y 좌표 y, width, height,
pressure, tangentialPressure, tiltX,
tiltY, twist, altitudeAngle,
azimuthAngle를 가지며, buttons 버튼들이 눌린 상태인 포인터에서
번호가 button인 버튼을 누르는 것과 동등하도록
browsing context에서 수행한다. ctrlKey,
shiftKey,
altKey, 및 metaKey를
global key state의 대응하는 항목과 같게 설정한다.
WebDriver API를 통해 노출되지 않는 포인터의 타입별
프로퍼티는 해당 프로퍼티를 지원하지 않는 하드웨어에 대해 지정된
기본값으로 설정되어야 한다.
action object, source, global key state, tick duration, browsing context, 및 actions options가 주어졌을 때 pointerUp 동작을 발송하려면:
pointerType을
action object의 pointerType 프로퍼티와 같게 둔다.
button을
action object의 button 프로퍼티와 같게 둔다.
source의 pressed 프로퍼티가
button을 포함하지 않으면,
null을 데이터로 하여
성공을 반환한다.
x를 source의
x 프로퍼티와 같게 둔다.
y를 source의
y 프로퍼티와 같게 둔다.
button을
source의 pressed 프로퍼티에 대응하는 set에서 제거하고,
buttons를 그 프로퍼티의 결과 값으로 둔다.
구현별 동작
발송 단계 수행을
[UI-EVENTS] 및
[POINTER-EVENTS]의 요구사항에 따라,
input source의 pointerId와 같은 pointerId를 가지고,
타입 pointerType이며, 뷰포트 x 좌표 x,
뷰포트 y 좌표 y에 있고, buttons 버튼들이
눌린 상태인 포인터에서 번호가 button인 버튼을 놓는 것과 동등하도록
browsing context에서 수행한다. 생성된 이벤트는
ctrlKey, shiftKey,
altKey, 및 metaKey를
global key state의 대응하는 항목과 같게 설정해야 한다.
WebDriver API를 통해 노출되지 않는 포인터의 타입별
프로퍼티는 해당 프로퍼티를 지원하지 않는 하드웨어에 대해 지정된
기본값으로 설정되어야 한다.
action object, source, global key state, tick duration, browsing context, 및 actions options가 주어졌을 때 pointerMove 동작을 발송하려면:
x offset을 action object의
x 프로퍼티와 같게 둔다.
y offset을 action object의
y 프로퍼티와 같게 둔다.
origin을 action object의
origin 프로퍼티와 같게 둔다.
(x, y)를 source, x offset, y offset, origin, browsing context, 및 actions options로 origin에 상대적인 좌표 가져오기를 시도한 결과로 둔다.
x가 0보다 작거나 CSS 픽셀 단위의 뷰포트 너비보다 크면, 오류를 오류 코드 move target out of bounds와 함께 반환한다.
y가 0보다 작거나 CSS 픽셀 단위의 뷰포트 높이보다 크면, 오류를 오류 코드 move target out of bounds와 함께 반환한다.
duration을,
action object의 duration 프로퍼티가
undefined가 아니면 그 프로퍼티와 같게,
그렇지 않으면 tick duration과 같게 둔다.
duration이 0보다 크고 임의의 구현 정의 경계 안에 있으면, 구현 정의 시간만큼 지나도록 비동기적으로 기다린다.
width를 action object의
width 프로퍼티와 같게 둔다.
height를 action object의
height 프로퍼티와 같게 둔다.
pressure를 action object의
pressure 프로퍼티와 같게 둔다.
tangentialPressure를
action object의 tangentialPressure 프로퍼티와 같게 둔다.
tiltX를 action object의
tiltX 프로퍼티와 같게 둔다.
tiltY를 action object의
tiltY 프로퍼티와 같게 둔다.
twist를 action object의
twist 프로퍼티와 같게 둔다.
altitudeAngle을 action object의
altitudeAngle 프로퍼티와 같게 둔다.
azimuthAngle을 action object의
azimuthAngle 프로퍼티와 같게 둔다.
source, global key state, duration, start x, start y, x, y, width, height, pressure, tangentialPressure, tiltX, tiltY, twist, altitudeAngle, azimuthAngle 인수로 포인터 이동 수행을 한다.
source, global key state, duration, start x, start y, target x, target y, width, height, pressure, tangentialPressure, tiltX, tiltY, twist, altitudeAngle, 및 azimuthAngle이 주어졌을 때 포인터 이동을 수행하려면:
time delta를 현재 tick의 시작 이후의 시간으로 두며, 단조 시계의 밀리초 단위로 측정한다.
duration ratio를, duration이 0보다 크면 time delta와 duration의 비율로, 그렇지 않으면 1로 둔다.
duration ratio가 1이거나,
구현이 이동 동작을 더 이상 세분하지 않을 정도로 1에 충분히 가까우면,
last를 true로 둔다. 그렇지 않으면 last를
false로 둔다.
last가 true이면, x를 target x와 같게 하고 y를 target y와 같게 둔다.
그렇지 않으면 x를 duration ratio × (target x - start x) + start x의 근삿값과 같게 하고, y를 duration ratio × (target y - start y) + start y의 근삿값과 같게 둔다.
current x를 input state의
x 프로퍼티와 같게 둔다.
current y를 input state의
y 프로퍼티와 같게 둔다.
x가 current x와 같지 않거나 y가 current y와 같지 않으면, 다음 단계를 실행한다.
buttons를 input
state의 buttons 프로퍼티와 같게 둔다.
[UI-EVENTS] 및 [POINTER-EVENTS]의 요구사항에 따라,
input source의 pointerId와 같은 pointerId를 가지고,
타입 pointerType이며,
뷰포트 x 좌표 current x, 뷰포트 y
좌표 current y에서 뷰포트 x
좌표 x 및 뷰포트 y
좌표 y로 이동하고, width, height,
pressure, tangentialPressure, tiltX,
tiltY, twist, altitudeAngle,
azimuthAngle를 가지며,
buttons 버튼들이 눌린 상태인 포인터를 이동하는 것과 동등하도록
browsing context에서 구현별
동작 발송 단계 수행을 수행한다. 생성된
이벤트는 ctrlKey, shiftKey,
altKey, 및 metaKey를
global key state의 대응하는 항목과 같게 설정해야 한다.
WebDriver API를 통해 노출되지 않는 포인터의 타입별
프로퍼티는 해당 프로퍼티를 지원하지 않는 하드웨어에 대해 지정된
기본값으로 설정되어야 한다. pointerType이 "pen" 또는
"touch"이고 buttons가 비어 있는 경우에는,
이는 no-op일 수 있다. 타입이 "mouse"인 포인터의 경우 이는
항상 적어도 pointerMove 이벤트를 포함하는 이벤트를 생성한다.
input state의 x 프로퍼티를
x와 같게 하고 y 프로퍼티를
y와 같게 둔다.
last가 true이면, 반환한다.
다음 하위 단계를 병렬로 실행한다.
구현 정의 시간이 지나도록 비동기적으로 기다린다.
input state, duration, start x, start y, target x, target y 인수로 포인터 이동 수행을 한다.
action object, source, global key state, tick duration, browsing context, 및 actions options가 주어졌을 때 pointerCancel 동작을 발송하려면:
[UI-EVENTS] 및 [POINTER-EVENTS]의 요구사항에 따라, source의 pointerId 항목과 같은 pointerId를 가진 포인터의 임의 동작을 취소하는 것과 동등하도록 browsing context에서 구현별 동작 발송 단계 수행을 수행한다. 타입은 pointerType이다.
action object, source, global key state, tick duration, browsing context, 및 actions options가 주어졌을 때 scroll 동작을 발송하려면:
x offset을 action object의
x 프로퍼티와 같게 둔다.
y offset을 action object의
y 프로퍼티와 같게 둔다.
origin을 action object의
origin 프로퍼티와 같게 둔다.
(x, y)를 source, x offset, y offset, origin, browsing context, 및 actions options로 origin에 상대적인 좌표 가져오기를 시도한 결과로 둔다.
x가 0보다 작거나 CSS 픽셀 단위의 뷰포트 너비보다 크면, 오류를 오류 코드 move target out of bounds와 함께 반환한다.
y가 0보다 작거나 CSS 픽셀 단위의 뷰포트 높이보다 크면, 오류를 오류 코드 move target out of bounds와 함께 반환한다.
delta x를 action object의
deltaX 프로퍼티와 같게 둔다.
delta y를 action object의
deltaY 프로퍼티와 같게 둔다.
duration을,
action object의 duration 프로퍼티가
undefined가 아니면 그 프로퍼티와 같게,
그렇지 않으면 tick duration과 같게 둔다.
duration이 0보다 크고 임의의 구현 정의 경계 안에 있으면, 구현 정의 시간만큼 지나도록 비동기적으로 기다린다.
global key state, duration, x, y, delta x, delta y, 0, 0 인수로 스크롤 수행을 한다.
duration, x, y, target delta x, target delta y, current delta x 및 current delta y가 주어졌을 때 스크롤을 수행하려면:
time delta를 현재 tick의 시작 이후의 시간으로 두며, 단조 시계의 밀리초 단위로 측정한다.
duration ratio를, duration이 0보다 크면 time delta와 duration의 비율로, 그렇지 않으면 1로 둔다.
duration ratio가 1이거나,
구현이 이동 동작을 더 이상 세분하지 않을 정도로 1에 충분히 가까우면,
last를 true로 둔다. 그렇지 않으면 last를
false로 둔다.
last가 true이면, delta x를 target delta x - current delta x와 같게 하고 delta y를 target delta y - current delta y와 같게 둔다.
그렇지 않으면 delta x를 duration ratio × target delta x - current delta x의 근삿값과 같게 하고, delta y를 duration ratio × target delta y - current delta y의 근삿값과 같게 둔다.
delta x가 0과 같지 않거나 delta y가 0과 같지 않으면, 다음 단계를 실행한다.
[UI-EVENTS]의 요구사항에 따라,
뷰포트 x 좌표 x, 뷰포트 y
좌표 y에서, deltaX 값 delta x, deltaY
값 delta y로 휠 스크롤하는 것과 동등하도록
browsing context에서 구현별
동작 발송 단계 수행을 수행한다. 생성된 이벤트는
ctrlKey, shiftKey,
altKey, 및 metaKey를
global key state의 대응하는 항목과 같게 설정해야 한다.
current delta x 프로퍼티를
delta x + current delta x와 같게 하고,
current delta y 프로퍼티를
delta y + current delta y와 같게 둔다.
last가 true이면, 반환한다.
다음 하위 단계를 병렬로 실행한다.
구현 정의 시간이 지나도록 비동기적으로 기다린다.
duration, x, y, target delta x, target delta y, current delta x, current delta y 인수로 스크롤 수행을 한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/actions |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
input state를 session 및 session의 현재 최상위 브라우징 컨텍스트로 입력 상태 가져오기를 한 결과로 둔다.
actions options를 새 동작 옵션으로 두며, 요소 origin인지 여부 단계는 웹 요소를 나타냄으로 설정하고, 요소 origin 가져오기 단계는 WebElement origin 가져오기로 설정한다.
actions by tick를 input state, parameters 및 actions options로 동작 시퀀스 추출을 시도한 결과로 둔다.
input state, actions by tick, 현재 브라우징 컨텍스트, 및 actions options로 동작 발송을 한다. 이것이 오류를 결과로 내면 그 오류를 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| DELETE | /session/{session id}/actions |
동작 해제 명령은 현재 눌려 있는 모든 키와 포인터 버튼을 해제하는 데 사용된다. 이는 상태가 명시적인 일련의 동작으로 해제된 것처럼 이벤트가 발생되도록 한다. 또한 가상 장치의 모든 내부 상태를 지운다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
input state를 세션 및 현재 최상위 브라우징 컨텍스트로 입력 상태 가져오기의 결과로 둔다.
actions options를 새 동작 옵션으로 두며, 요소 origin인지 여부 단계는 웹 요소를 나타냄으로 설정하고, 요소 origin 가져오기 단계는 WebElement origin 가져오기로 설정한다.
input state로 동작 큐 토큰을 기다린다.
undo actions를 input state의 입력 취소 목록의 역순으로 둔다.
input state, undo actions, 현재 브라우징 컨텍스트, 및 actions options로 동작 발송을 시도한다.
session 및 session의 현재 최상위 브라우징 컨텍스트로 입력 상태 재설정을 한다.
이 장은 다양한 유형의 사용자 프롬프트와의 상호작용을 설명한다. 사용자 프롬프트의 공통점은 사용자가 상호작용해야 하는 모달 창이며, 그 후에야 이벤트 루프가 일시 중지 해제되고 제어가 session의 현재 최상위 브라우징 컨텍스트로 반환된다는 점이다.
기본적으로 사용자 프롬프트는 사용자 프롬프트 핸들러가 정의되어 있지 않는 한 자동으로 처리되지 않는다. 사용자 프롬프트가 나타나면, 이를 처리하는 것은 이어지는 명령의 역할이다. 이어서 요청된 명령이 이 장에 나열된 명령이 아니면, unexpected alert open 오류가 반환된다.
활성 세션이 정확히 하나의 항목만 포함하는 목록이고, 그 항목이 HTTP 세션이지만 BiDi 세션은 아닌 경우에는 언제나, beforeunload를 발생시키는 단계에서 구현은 unload 프롬프트를 표시하는 것이 성가시거나, 기만적이거나, 무의미할 가능성이 있는 것처럼 동작해야 한다.
이는 활성 HTTP 전용 세션이 있을 때 beforeunload 프롬프트가 절대 표시되지 않음을 의미한다.
사용자
프롬프트에는 연관된 사용자 프롬프트 메시지가 있으며,
이는 사용자에게 표시되는 문자열 메시지이거나,
메시지 길이가 0이면 null이다.
browsing context:가 주어졌을 때 활성 사용자 프롬프트를 가져오려면
agent를 browsing context의 활성 문서의 관련 agent로 둔다.
event loop가 일시 중지될 때 전달된 조건을 충족하기 위해 필요한 입력을 처리하는 사용자 프롬프트를 반환한다.
현재 사용자 프롬프트는 현재 브라우징 컨텍스트로 활성 사용자 프롬프트 가져오기를 한 결과이다.
사용자 프롬프트를 dismiss하려면, 해당 프롬프트에 Cancel 버튼이 있으면 사용자가 그 버튼을 클릭한 것처럼 동작하고, 그렇지 않으면 프롬프트를 accept한다.
사용자 프롬프트를 accept하려면, 사용자가 그 프롬프트의 OK 버튼을 클릭한 것처럼 동작한다.
원격 엔드에는 사용자 프롬프트 핸들러가 있으며, 이는 사용자 프롬프트가 표시될 때 WebDriver 세션이 어떻게 반응할지를 정의한다. 이는 null이거나, 문자열과 프롬프트 핸들러 구성 값 사이의 map이다. 처음에는 null이다.
프롬프트 핸들러 구성은 두 항목을 가진 struct이다. 하나는 문자열인 handler이고, 다른 하나는 boolean인 notify이다.
configuration이 주어졌을 때 프롬프트 핸들러 구성을 직렬화하려면:
serialized를 configuration의 handler로 둔다.
«"dismiss", "accept"»가
serialized를 포함하고,
configuration의 notify가 true이면,
" and notify"를
serialized에 append한다.
serialized를 반환한다.
| 핸들러 키 | 설명(비규범). |
|---|---|
"dismiss"
|
마주치는 모든 단순 대화상자는 dismiss되어야 한다. |
"accept"
|
마주치는 모든 단순 대화상자는 accept되어야 한다. |
"dismiss and notify"
|
마주치는 모든 단순 대화상자는 dismiss되어야 하며, 대화상자가 처리되었다는 오류가 반환되어야 한다. |
"accept and notify"
|
마주치는 모든 단순 대화상자는 accept되어야 하며, 대화상자가 처리되었다는 오류가 반환되어야 한다. |
"ignore"
|
마주치는 모든 단순 대화상자는 사용자가 처리하도록 남겨 두어야 한다. |
유효한 프롬프트
타입은 «"alert",
"beforeUnload", "confirm",
"default", "file", "prompt"»이다.
"default" 타입은 주어진 프롬프트 타입에 특정 핸들러가 정의되어 있지 않을 때의
fallback을 나타내며, 여기에는 "beforeUnload" 프롬프트 타입도 포함된다.
이는 처리되지 않은 프롬프트 동작이 "default"를
포함하는 map인 경우에만
설정될 수 있다. HTTP 전용 세션에서
처리되지 않은 프롬프트 동작을 문자열 값으로 설정하면, 그 값은
내부 타입 "fallbackDefault"에 할당된다.
"fallbackDefault" 값은
"beforeUnload" 프롬프트 타입에는 사용되지 않으며, 대신
"accept" 핸들러로 fallback된다. 이는 HTTP 전용 세션이
"beforeUnload" 핸들러의 사용자 지정을 허용하지 않고, 다른 프로토콜을
활성화하는 것이 부작용으로 사용자 프롬프트 처리를 변경할 것으로 예상되지 않기 때문이다.
"file" 프롬프트 타입은
[WebDriver-BiDi] 세션에서만 존중된다.
인수 value가 주어졌을 때 처리되지 않은 프롬프트 동작으로 역직렬화하려면:
value를 value로 JSON에서 파생된 JavaScript 값을 Infra 값으로 변환한 결과로 설정한다.
value가 문자열이 아니면, [WebDriver-BiDi]도 지원하지 않는 구현은 invalid argument 오류 코드와 함께 오류를 반환할 수 있다.
이는 [WebDriver-BiDi]가 현재 명세를 monkey-patching하지 못하도록 하기 위한 것이다.
is string value를 false로 둔다.
value가 string이면 value를
map «["fallbackDefault"
→ value]»로 설정하고 is string value를 true로 설정한다.
value가 map이 아니면, invalid argument 오류 코드와 함께 오류를 반환한다.
value 안의 각 prompt type → handler에 대해:
is string value가 false이고 유효한 프롬프트 타입이 prompt type을 포함하지 않으면, invalid argument 오류 코드와 함께 오류를 반환한다.
알려진 프롬프트 핸들러가 핸들러 키 handler를 가진 항목을 포함하지 않으면, invalid argument 오류 코드와 함께 오류를 반환한다.
notify를 false로 둔다.
handler가 "accept and notify"이면,
handler를 "accept"로 설정하고
notify를 true로 설정한다.
handler가 "dismiss and notify"이면,
handler를 "dismiss"로 설정하고
notify를 true로 설정한다.
handler가 "ignore"이면,
notify를 true로 설정한다.
configuration을 handler handler와 notify notify를 가진 프롬프트 핸들러 구성으로 둔다.
user prompt handler[prompt type]를 configuration으로 설정한다.
user prompt handler를 데이터로 하여 성공을 반환한다.
requested prompt handler가 주어졌을 때 사용자 프롬프트 핸들러가 일치하는지 확인하려면:
사용자 프롬프트 핸들러가 null이면, true를 반환한다.
requested prompt handler 안의 각 request prompt type → request handler에 대해:
사용자 프롬프트 핸들러가 request prompt type을 포함하면:
requested prompt handler의 handler가 사용자 프롬프트 핸들러의 handler와 같지 않으면, false를 반환한다.
이는 requested prompt handler의 notify가 handler와 일치하는지 확인하지 않는다. notify 구성요소는, 존재한다면 HTTP 세션에만 영향을 주기 때문이다.
requested prompt handler가 주어졌을 때 사용자 프롬프트 핸들러를 업데이트하려면:
사용자 프롬프트 핸들러가 null이면, 사용자 프롬프트 핸들러를 빈 map으로 설정한다.
requested prompt handler 안의 각 request prompt type → request handler에 대해:
사용자 프롬프트 핸들러[request prompt type]를 request handler로 설정한다.
사용자 프롬프트 핸들러를 직렬화하려면:
사용자 프롬프트 핸들러가 null이면,
"dismiss and notify"를 반환한다.
사용자 프롬프트 핸들러의
size가 1이고,
사용자 프롬프트 핸들러가
"fallbackDefault"를 포함하면,
사용자 프롬프트
핸들러["fallbackDefault"]로 프롬프트
핸들러 구성 직렬화를 한 결과를 반환한다.
serialized를 빈 map으로 둔다.
사용자 프롬프트
핸들러의 각 key → value에 대해:
serialized[key]를 value로 프롬프트 핸들러 구성 직렬화한 결과로 설정한다.
serialized로 Infra 값을 JSON 호환 JavaScript 값으로 변환한 결과를 반환한다.
주석 달린 unexpected alert open 오류는 unexpected alert open 오류 코드를 가진 오류이며, 다음 항목을 가진 선택적 오류 데이터 사전을 가진다.
text"
type의 프롬프트 핸들러를 가져오려면:
사용자 프롬프트 핸들러가 null이면 handlers를 빈 map으로 둔다. 그렇지 않으면 handlers를 사용자 프롬프트 핸들러로 둔다.
handlers가 type을 포함하면 handlers[type]을 반환한다.
handlers가 "default"를 포함하면
handlers["default"]를 반환한다.
type이 "beforeUnload"이면,
handler "accept"와
notify false를 가진
프롬프트 핸들러 구성을 반환한다.
handlers가 "fallbackDefault"를 포함하면
handlers["fallbackDefault"]를 반환한다.
handler "dismiss"와
notify true를 가진 프롬프트 핸들러
구성을 반환한다.
모든 사용자 프롬프트를 처리하려면:
현재 브라우징 컨텍스트가 대화상자에 의해 차단되어 있지 않으면 성공을 반환한다.
type을 "default"로 둔다.
현재 사용자 프롬프트가 alert 대화상자이면
type을 "alert"로 설정한다. 그렇지 않고
현재 사용자 프롬프트가 beforeunload 대화상자이면
type을 "beforeUnload"로 설정한다. 그렇지 않고
현재 사용자 프롬프트가 confirm 대화상자이면
type을 "confirm"으로 설정한다. 그렇지 않고
현재 사용자 프롬프트가 prompt 대화상자이면
type을 "prompt"로 설정한다.
handler를 type으로 프롬프트 핸들러 가져오기를 한 결과로 둔다.
handler의 handler에 따라 다음 하위 단계를 수행한다.
accept"
현재 사용자 프롬프트를 accept한다.
dismiss"
현재 사용자 프롬프트를 dismiss한다.
ignore"
아무것도 하지 않는다.
handler의 notify가 true이면, 주석 달린 unexpected alert open 오류를 반환한다.
성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/alert/dismiss |
Alert dismiss 명령은 존재하는 경우 단순 대화상자를 dismiss한다. 반드시 dismiss 버튼이 있지는 않을 수 있는 alert 사용자 프롬프트를 dismiss하라는 요청은 그것을 accept하는 것과 같은 효과를 가진다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, no such window 오류 코드와 함께 오류를 반환한다.
현재 사용자 프롬프트가 null이면, no such alert 오류 코드와 함께 오류를 반환한다.
현재 사용자 프롬프트를 dismiss한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/alert/accept |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, no such window 오류 코드와 함께 오류를 반환한다.
현재 사용자 프롬프트가 null이면, no such alert 오류 코드와 함께 오류를 반환한다.
현재 사용자 프롬프트를 accept한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/alert/text |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, no such window 오류 코드와 함께 오류를 반환한다.
현재 사용자 프롬프트가 null이면, no such alert 오류 코드와 함께 오류를 반환한다.
message를 현재 사용자 프롬프트와 연관된
텍스트 메시지로 두고,
그렇지 않으면 null로 둔다.
message를 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/alert/text |
Alert 텍스트 보내기 명령은
window.prompt
사용자 프롬프트의 텍스트 필드를 주어진 값으로 설정한다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
text를 parameters에서
"text" 프로퍼티를 가져온 결과로 둔다.
text가 String이 아니면, invalid argument 오류 코드와 함께 오류를 반환한다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, no such window 오류 코드와 함께 오류를 반환한다.
현재 사용자 프롬프트가 null이면, no such alert 오류 코드와 함께 오류를 반환한다.
현재 사용자 프롬프트를 생성한 API에 대한 하위 단계를 실행한다.
window.alert
window.confirm
element not interactable 오류 코드와 함께 오류를 반환한다.
window.prompt
아무것도 하지 않는다.
unsupported operation 오류 코드와 함께 오류를 반환한다.
현재 사용자 프롬프트의 텍스트 필드 값을 text로 설정하기 위해 사용자 에이전트 의존 단계를 수행한다.
스크린샷은 추가적인 시각적 진단 정보를 제공하기 위한 메커니즘이다. 이는 시각적 뷰포트의 프레임버퍼 스냅샷을 무손실 PNG 이미지로 덤프하는 방식으로 동작한다. 이는 Base64로 인코딩된 문자열로 로컬 엔드에 반환된다.
WebDriver는 스크린샷 찍기 명령을 제공하여 최상위 브라우징 컨텍스트의 시각적 뷰포트를 캡처하고, 요소 스크린샷 찍기 명령을 제공하여, 요소가 뷰 안으로 스크롤된 후 그 경계 사각형의 보이는 영역에 대해 동일한 작업을 수행한다.
사각형이 주어졌을 때, 프레임버퍼에서 경계 상자를 그리려면:
시각적 뷰포트의 너비 또는 높이 중 하나가 0 CSS 픽셀이면, 오류를 오류 코드 unable to capture screen과 함께 반환한다.
paint width를 시각적 뷰포트의 너비 – min(사각형 x 좌표, 사각형 x 좌표 + 사각형 너비 치수)로 둔다.
paint height를 시각적 뷰포트의 높이 – min(사각형 y 좌표, 사각형 y 좌표 + 사각형 높이 치수)로 둔다.
canvas를 새
canvas
요소로 두고,
그
width
및
height를
각각 paint width 및 paint height로 설정한다.
context를 canvas context mode로 두며, 이는 canvas를 대상으로 하여 2D context creation algorithm을 호출한 결과이다.
다음 좌표로 지정된 프레임버퍼의 영역을 context에 그리는 것과 동등한 구현별 단계를 완료한다.
canvas와 함께 성공을 반환한다.
canvas
요소를
Base64로 인코딩하려면:
canvas
요소의 비트맵의
origin-clean 플래그가 false로 설정되어 있으면,
오류를 오류 코드 unable to
capture screen과 함께 반환한다.
canvas
요소의 비트맵에
픽셀이 없으면(즉, 가로 치수 또는 세로 치수 중 하나가 0이면)
오류를 오류 코드 unable to
capture screen과 함께 반환한다.
file을
"image/png"를 인수로 사용하여,
canvas 요소의
비트맵을 파일로 직렬화한 것으로 둔다.
index를 data URL 안의 ","의
index
of로 둔다.
encoded string을 (index + 1)을 start 인수로 사용한 data URL의 substring으로 둔다.
encoded string을 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/screenshot |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
사용자 에이전트가 다음에 애니메이션 프레임 콜백을 실행할 때:
root rect를 session의 현재 최상위 브라우징 컨텍스트의 문서 요소의 사각형으로 둔다.
screenshot result를 root rect를 인수로 주어 프레임버퍼에서 경계 상자 그리기를 호출하도록 시도한 결과로 둔다.
canvas를
screenshot result의 데이터인
canvas
요소로 둔다.
encoding result를 canvas를 canvas를 Base64로 인코딩하도록 시도한 결과로 둔다.
encoded string을 encoding result의 데이터로 둔다.
encoded string을 데이터로 하여 성공을 반환한다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| GET | /session/{session id}/element/{element id}/screenshot |
요소 스크린샷 찍기 명령은 요소의 경계 사각형이 포함하는 보이는 영역의 스크린샷을 찍는다.
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
element를
session 및 URL variables["element id"]로
알려진 요소 가져오기를
시도한
결과로 둔다.
element를 뷰 안으로 스크롤한다.
사용자 에이전트가 다음에 애니메이션 프레임 콜백을 실행할 때:
element rect를 element의 사각형으로 둔다.
screenshot result를 element rect를 인수로 주어 프레임버퍼에서 경계 상자 그리기를 호출하도록 시도한 결과로 둔다.
canvas를
screenshot result의 데이터인
canvas
요소로 둔다.
encoding result를 canvas를 canvas를 Base64로 인코딩하도록 시도한 결과로 둔다.
encoded string을 encoding result의 데이터로 둔다.
encoded string을 데이터로 하여 성공을 반환한다.
인쇄 함수는 문서를 페이지가 나뉜 형식으로 렌더링하는 메커니즘이다. 이는 페이지가 나뉜 문서의 PDF 표현을 포함하는 Base64 인코딩 문자열로 로컬 엔드에 반환된다.
인수 pageRanges 및 totalPages로 페이지 범위를 파싱해야 할 때, 구현은 다음을 해야 한다.
range가 Number이면:
그렇지 않으면:
-" 문자에서
분할한 결과로 둔다.
그렇지 않으면:
1로 둔다. 그렇지 않으면
lowerBound를 rangeParts의
첫 번째 요소를
정수로 파싱하도록
시도한 결과로 둔다.
String은 모든 공백 문자를 제거한 후 길이가 0이면 빈 문자열과 동등하다.
인수 input으로 정수로 파싱해야 할 때 구현은 다음을 해야 한다.
U+0030 - U+0039
범위(즉, 0 - 9)를 벗어나는 문자를 포함하면,
상태 invalid argument와 함께
오류를 반환한다.
10으로
parseInt를 호출한 결과로 둔다.
| HTTP 메서드 | URI 템플릿 |
|---|---|
| POST | /session/{session id}/print |
session, URL variables 및 parameters가 주어졌을 때의 원격 엔드 단계는 다음과 같다.
session의 현재 최상위 브라우징 컨텍스트가 더 이상 열려 있지 않음이면, 오류를 오류 코드 no such window와 함께 반환한다.
session으로 모든 사용자 프롬프트 처리를 시도한다.
orientation을 parameters에서
"orientation"이라는 이름이고 기본값이
"portrait"인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
orientation이 String이 아니거나,
"landscape" 또는 "portrait" 값 중 하나를
가지지 않으면, 오류를 오류
코드 invalid argument와 함께 반환한다.
scale을 parameters에서
"scale"이라는 이름이고 기본값이
1인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
scale이 Number가 아니거나,
0.1보다 작거나 2보다 크면
오류를
오류 코드 invalid
argument와 함께 반환한다.
background를 parameters에서
"background"라는 이름이고 기본값이
false인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
background가 Boolean이 아니면 오류를 오류 코드 invalid argument와 함께 반환한다.
page를 parameters에서
"page"라는 이름이고 기본값이 빈
Object인 기본값으로 프로퍼티
가져오기의 결과로 둔다.
pageWidth를 page에서
"width"라는 이름이고 기본값이
21.59인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
pageHeight를 page에서
"height"라는 이름이고 기본값이
27.94인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
pageWidth 또는 pageHeight 중 하나가
Number가 아니거나, (2.54 / 72)보다 작으면,
오류를
오류 코드 invalid
argument와 함께 반환한다.
최소 페이지 크기는 1 point이며, 이는
절대 길이에 따라
(2.54 / 72)이다.
margin을 parameters에서
"margin"이라는 이름이고 기본값이 빈
Object인 기본값으로 프로퍼티
가져오기의 결과로 둔다.
marginTop을 margin에서
"top"이라는 이름이고 기본값이
1인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
marginBottom을 margin에서
"bottom"이라는 이름이고 기본값이
1인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
marginLeft를 margin에서
"left"라는 이름이고 기본값이
1인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
marginRight를 margin에서
"right"라는 이름이고 기본값이
1인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
marginTop, marginBottom, marginLeft, 또는 marginRight 중 어느 하나가 Number가 아니거나 0보다 작으면, 오류를 오류 코드 invalid argument와 함께 반환한다.
shrinkToFit을 parameters에서
"shrinkToFit"이라는 이름이고 기본값이
true인 기본값으로
프로퍼티 가져오기의 결과로 둔다.
shrinkToFit이 Boolean이 아니면 오류를 오류 코드 invalid argument와 함께 반환한다.
pageRanges를 parameters에서
"pageRanges"라는 이름이고 기본값이 빈
Array인
기본값으로
프로퍼티 가져오기의 결과로 둔다.
pageRanges가 Array가 아니면 오류를 오류 코드 invalid argument와 함께 반환한다.
사용자 에이전트가 다음에 애니메이션 프레임
콜백을 실행할 때, pdfData를
CSS 미디어 타입이 print로 설정되고,
PDF로 인코딩되며, 다음 종이 설정을 가진
session의 현재 브라우징
컨텍스트의 페이지가 나뉜 표현을 생성하기 위한 UA별 단계를 수행하도록
시도한
결과로 둔다.
| 프로퍼티 | 값 |
|---|---|
| cm 단위 너비 | orientation이
"portrait"이면 pageWidth, 그렇지 않으면 pageHeight
|
| cm 단위 높이 | orientation이
"portrait"이면 pageHeight, 그렇지 않으면 pageWidth
|
| 위쪽 여백, cm 단위 | marginTop |
| 아래쪽 여백, cm 단위 | marginBottom |
| 왼쪽 여백, cm 단위 | marginLeft |
| 오른쪽 여백, cm 단위 | marginRight |
또한 UA는 다음 포맷팅 힌트를 적용해야 한다.
1과 같지 않으면false이면true이면pageRanges가 빈 Array가 아니면, pages를 pageRanges 및 pdfData에 포함된 페이지 수를 인수로 하여 페이지 범위 파싱을 시도한 결과로 둔 다음, 1 기반 인덱스가 pages에 포함되지 않은 페이지를 pdfData에서 제거한다
encoding result를 pdfData에 대해 Base64 Encode를 호출한 결과로 둔다.
encoded string을 encoding result의 데이터로 둔다.
encoded string을 데이터로 하여 성공을 반환한다
이 절은 비규범적이다.
이 목록은 완전하지 않으며 최신이 아닐 수 있다.
다음 외부 명세는 추가 WebDriver 모듈을 정의한다.
원격 엔드는 새 세션을 생성할 때 새 프로필을 생성하는 것이 바람직하다. 이는 잠재적으로 민감한 세션 데이터가 새 세션에서 접근 가능해지는 것을 방지하며, 개인정보를 보장하고 상태가 다음 세션으로 새어 나가는 것을 방지한다.
사용자 에이전트는 WebDriver를 활성화할지 여부를 테스트하기 위해 명령줄 플래그나 구성 옵션에 의존할 수 있으며, 또는 사용자 에이전트가 HTTP 엔드포인트를 직접 구현하지 않는 경우, 권한 있는 콘텐츠 문서나 제어 위젯을 통해 연결을 시작하거나 확인하도록 할 수 있다.
사용자 에이전트가 WebDriver를 활성화하려면 사용자의 명시적 동작을 요구하고, 공개적으로 소비되는 사용자 에이전트 버전에서는 WebDriver가 비활성화된 상태로 남아 있게 하는 것이 강력히 권장된다.
네트워크상의 임의의 머신이 연결하여 세션을 생성하는 것을 방지하기 위해, 기본적으로 loopback 장치에서 오는 연결만 허용하는 것이 권장된다.
원격
엔드는
연결하고 요청할 수 있는 허용 IP 범위를 제한하기 위한
구성 옵션을 포함할 수 있다.
이에 대한 기본 설정은 연결을 IPv4 localhost
CIDR 범위 127.0.0.0/8 및
IPv6 localhost 주소 ::1로 제한하는 것일 수 있다. [RFC4632]
또한 사용자 에이전트는 WebDriver의 제어 아래 있는 사용자 에이전트 세션을 일반 브라우징 세션에 사용되는 것들과 시각적으로 구별하기 위해 노력하는 것이 권장된다. 이는 “door hanger”와 같은 브라우저 chrome 요소, OS 창의 컬러풀한 장식, 또는 자동화 창을 쉽게 식별할 수 있도록 창에서 눈에 잘 띄는 어떤 위젯 요소를 통해 수행될 수 있다.
WebDriver는 뷰포트 안에서 요소의 가시성을 확인하기 위한 primitive를 정의하지 않지만, 이는 많은 사용자에게 중요한 기능임을 인정한다. 여기서는 요소의 가시성에 대한 단순화된 근사값을 제공하는 권장 접근 방식을 포함하지만, 이는 tree-traversal에만 의존하고, 가시성 검사의 일부만 다룬다는 점에 유의한다.
요소의 가시성은
사람의 눈에 지각적으로 보이는 것에 의해 안내된다.
이 맥락에서, 요소의 표시됨 상태는
visibility
또는 display 스타일 프로퍼티와 관련되지 않는다.
구현자가 요소의 가시성을 확인하기 위해 권장되는 접근 방식은 원래 Selenium 프로젝트에서 개발되었으며, 요소의 성질 및 트리 안에서의 관계에 대한 대략적인 근사에 기반한다. 일반적으로 요소는 그 일부라도 뷰포트 경계 안의 canvas에 그려져 있으면 보이는 것으로 간주된다.
요소 표시됨 상태는 요소가 현재 보이는지를 나타내는 boolean이다.
element가 주어졌을 때,
bot.dom.isShown Selenium atoms를 사용하여
요소 표시됨 상태를 가져오려면:
function을
bot.dom.isShown 함수로 둔다.
result를 인수 null 및 element로 function의 [[Call]] 내부 메서드를 호출한 결과로 둔다. 이것이 예외를 발생시키면, unknown error 오류 코드와 함께 오류를 반환한다.
result를 데이터로 하여 성공을 반환한다.
요소 표시됨 상태는 일반적으로
GET 요청에 대한 엔드포인트로 노출되며,
URI Template은
/session/{session id}/element/{element id}/displayed이다.
지난 수년 동안 브라우저 자동화가 가능하도록 돕고 그로써 이 표준의 목표를 발전시킨 많은 사람들이 있었다. 특히, 이 표준이 존재할 수 있도록 해 준 Selenium Open Source 커뮤니티에 감사를 전한다.
이 표준은 다음 사람들이 작성했다. Aleksey Chemakin, Andreas Tolfsen, Andrey Botalov, Brian Burg, Christian Bromann, Clayton Martin, Daniel Wagner-Hall, David Burns, Dominique Hazael-Massieux, Eran Messeri, Erik Wilde, Gábor Csárdi, Henrik Skupin, James Graham, Jason Juang, Jason Leyba, Jim Evans, John Chen, John Jansen, Jonathan Lipps, Jonathon Kereliuk, Luke Inman-Semerau, Maja Frydrychowicz, Malini Das, Manoj Kumar, Marc Fisher, Mike Pennisi, Ondřej Machulda, Randall Kent, Sam Sneddon, Seva Lotoshnikov, Simon Stewart, Sri Harsha, Titus Fortner, and Vangelis Katsikaros. 작업은 David Burns와 Simon Stewart가 조율하고 편집했다.
교정과 개선 영역 제안에 대해 Berge Schwebs Bjørlo, Lukas Tetzlaff, Malcolm Rowe, Michael[tm] Smith, Nathan Bloomfield, Philippe Le Hégaret, Robin Berjon, Ross Patterson, and Wilhelm Joys Andersen에게 감사한다.
이 명세는 여러 다른 기반 명세에 의존한다.
다음 용어들은 Accessible Rich Internet Applications (WAI-ARIA) 1.2 명세에서 정의된다: [wai-aria-1.2]
다음 용어들은 Accessible Name and Description Computation 1.1 명세에서 정의된다: [accname-1.1]
다음 용어들은 Content Security Policy Level 3 명세에서 정의된다: [CSP3]
다음 용어들은 The Base16, Base32, and Base64 Data Encodings 명세에서 정의된다: [RFC4648]
다음 용어들은 DOM Parsing and Serialization 명세에서 정의된다: [DOM-PARSING]
다음 속성들은 UI Events 명세에서 정의된다: [UI-EVENTS]
다음 속성들은 UI Events Code 명세에서 정의된다: [UIEVENTS-KEY]
다음 용어들은 ECMAScript Language Specification에서 정의된다: [ECMA-262]
다음 용어들은 WHATWG Encoding 명세에서 정의된다: [ENCODING]
다음 용어들은 WHATWG Fetch 명세에서 정의된다: [FETCH]
다음 용어들은 WHATWG Fullscreen 명세에서 정의된다: [FULLSCREEN]
다음 용어들은 HTML 명세에서 정의된다: [HTML]
activeElement
속성으로, Document에 있다
Document 객체
Window 객체의
[[GetOwnProperty]]
Window
객체
WindowProxy
exotic 객체
setSelectionRange
confirm
alert
prompt
HTML 명세는 또한
input
요소의 상태를 정의한다:
HTML 명세는 또한 여러 다양한 속성을 정의한다:
HTML Editing APIs 명세는 다음 용어들을 정의한다: [EDITING]
다음 이벤트들도 HTML 명세에서 정의된다:
“data” URL 스킴 명세는 다음 용어를 정의한다: [RFC2397]
HTTP 준수가 되려면, 구현이 [RFC7230], [RFC7231], [RFC7232], [RFC7234] 및 [RFC7235]의 관련 부분집합을 지원한다고 가정한다.
다음 용어들은 Cookie 명세에서 정의된다: [RFC6265]
다음 용어들은 Same Site Cookie 명세에서 정의된다: [RFC6265bis]
다음 용어는 Hypertext Transfer Protocol (HTTP) Status Code Registry에서 정의된다:
다음 용어들은 Infra 명세에서 정의된다: [INFRA]
이 명세는 URI 템플릿을 사용한다. [URI-TEMPLATE]
hidden
visibilityState
속성으로, Document에 있다
visible
775cfb33b193eb8832cd5488f298006f45254685에 정의된다.
visibility
속성
display
속성
다음 용어는 표준에서 정의된다: [RFC1928]
이 명세의 IDL 프래그먼트는 Web IDL 명세에서 설명하는, 준수 IDL 프래그먼트에 요구되는 방식으로 해석해야 한다. [WEBIDL]
다음 용어는 Promises Guide에서 정의된다. [PROMISES-GUIDE]
다음 용어들은 Document Object Model XPath 표준에서 정의된다 [XPATH]
[[Call]] 내부 슬롯,
Function용
§E.
[[GetOwnProperty]] 내부 슬롯,
Object용
§E.
용
§E.
[[GetProperty]] 내부 슬롯,
Object용
§E.
NavigatorAutomationInformation
인터페이스
§4.
[[Put]] 내부 슬롯, Object용
§E.
NavigatorAutomationInformation의 속성
§4.
getBoundingClientRect()
(Element용)
getClientRects() (Element용)
compareDocumentPosition()
(Node용)
tree용)
Node용)
DOMTokenList 인터페이스
Element 인터페이스
getAttribute() (Element용)
getElementsByTagName()
(Element용)
hasAttribute() (Element용)
HTMLCollection 인터페이스
tree용)
tree용)
isTrusted 속성 (Event용)
Node
인터페이스
Node용)
NodeList 인터페이스
querySelectorAll() (ParentNode용)
ShadowRoot 인터페이스
tagName 속성 (Element용)
textContent 속성 (Node용)
Document용)
FileList 인터페이스
DOMRect 인터페이스
a
요소
address
요소
canvas
요소
datalist 요소
frame
요소
height 속성 (canvas
요소용)
HTMLAllCollection 인터페이스
HTMLFormControlsCollection 인터페이스
HTMLOptionsCollection 인터페이스
iframe
요소
optgroup 요소
option
요소
output
요소
readonly 속성 (input
요소용)
select
요소
textarea 요소
title 속성 (Document용)
type 속성 (input
요소용)
width 속성 (canvas
요소용)
list용)
map용)
iteration용)
map용)
map용)
struct용)
string용)
map용)
map용)
iteration용)
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: