Selenium 핵심 확장(User-Extensions.js)

⚡ 스마트 요약

Selenium 코어 확장 기능(사용자 확장 기능이라고도 함)은 사용자 지정 작업, 접근자 및 로케이터 전략을 추가합니다. Selenium IDE를 첨부하여 Java스크립트 함수 Selenium IDE가 시작될 때 PageBot 프로토타입 객체가 생성됩니다.

  • 🔘 세 가지 핵심 요소: 모든 Selenese 명령은 동작, 접근자 또는 주장, 혹은 위치 지정 전략입니다.
  • ☑️ 명명 규칙: 동작은 do로 시작하고, 접근자는 get 또는 is로 시작하며, 위치 지정자는 locateElementBy로 시작합니다.
  • ✅ 자유 대기 명령: doTextUpperCase를 등록하면 IDE가 textUpperCaseAndWait를 자동으로 생성합니다.
  • 🧪 부하 메커니즘: IDE는 시작 시 user-extensions.js 파일을 읽으므로 편집 후에는 매번 도구를 다시 시작해야 합니다.
  • 🛠️ 기존 상태: Selenium 코어와 Firefox-플러그인 IDE는 더 이상 사용되지 않습니다. Selenium 3 버전부터는 jar 파일에서 사용자 확장 기능 지원이 제외되었습니다.
  • 📊 현대식 경로: 현재 브라우저 확장 프로그램 IDE는 플러그인 매니페스트와 스크립트 실행 명령을 제공합니다.

Selenium 핵심 확장 기능과 user-extensions.js 파일

Selenium 핵심 확장

확장 기능을 이해하기 위해 먼저 세 가지 핵심 요소를 이해해 보겠습니다. Selenium IDEIDE에서 기록하거나 입력하는 모든 명령은 아래 세 가지 범주 중 하나에 속하며, 각 스크린샷은 해당 범주가 IDE 명령 목록에 어떻게 표시되는지 보여줍니다.

  1. 액션 : UI 화면에서 어떤 작업을 수행하고 있습니까?

    Selenium IDE 명령 목록에는 클릭 및 입력과 같은 액션 명령이 표시됩니다.

  2. 접근자/어설션: 사용자 인터페이스에서 가져온 데이터에 대해 어떤 검증을 수행합니까?

    Selenium get, is, verify, assert로 시작하는 IDE 접근자 및 어설션 명령

  3. 위치 파악 전략: UI에서 해당 요소를 찾는 방법.

    Selenium IDE 대상 상자에는 id, name, css 및 xpath와 같은 로케이터 전략이 나열됩니다.

Selenium IDE에는 이미 다양한 액션, 접근자, 어설션 및 로케이터 전략을 포함하는 완성도 높은 라이브러리가 함께 제공됩니다.

하지만 때때로 프로젝트에 필요한 기능이 해당 라이브러리에 없는 경우가 있습니다. 이러한 경우 사용자 지정 확장 기능을 추가하여 라이브러리를 확장할 수 있습니다. 이러한 사용자 지정 확장 기능을 라이브러리 확장 기능이라고 합니다. 사용자 확장.

예를 들어, 웹 요소에 텍스트를 입력하기 전에 대문자로 변환하는 액션이 ​​필요하다고 가정해 보겠습니다. 기본 라이브러리에는 이러한 액션이 없으므로 사용자 확장 기능을 직접 만들어야 합니다. 이 튜토리얼에서는 텍스트를 대문자로 변환하는 사용자 확장 기능을 만드는 방법을 배웁니다.

⚠️ 시작하기 전에: 여기에 설명된 워크플로는 다음 항목에 속합니다. Selenium 코어와 오리지널 Firefox-플러그인 Selenium IDE. Selenium 코어 기능은 더 이상 사용되지 않으며, 사용자 확장 기능 지원도 중단되었습니다. Selenium 병에 Selenium 3. 아래 단계와 코드는 여전히 많은 기존 Selenese 제품군이 의존하고 있기 때문에 그대로 유지됩니다. 최신 대체 방법은 이 문서의 뒷부분에서 설명합니다.

생성을 위한 요구 사항 Selenium 사용자 확장

사용자 확장 프로그램을 생성하려면 Selenium IDE를 사용하려면 기본적인 개념들을 알아야 합니다. JavaScript 특히, Java스크립트 프로토타입 객체. 아래 다이어그램은 사용자 확장 프로그램이 연결되는 두 개의 프로토타입 객체를 보여줍니다.

다이어그램 Selenium 사용자 확장 프로그램에서 사용되는 프로토타입 및 PageBot 프로토타입 객체

사용자 확장 프로그램을 만들려면 다음과 같이 작성합니다. Java스크립트 메서드를 추가하고 해당 메서드에 추가합니다. Selenium 객체 프로토타입과 PageBot 객체 프로토타입에 대해.

방법 Selenium IDE가 사용자 확장 기능을 인식합니다

사용자 확장 프로그램이 추가된 후 Selenium IDE가 시작되면 모든 기능이 해당 기능에 등록됩니다. Java스크립트 프로토타입이 로드되었습니다. Selenium IDE는 각 명령어를 이름으로 인식합니다. 따라서 다음 섹션의 접두사는 스타일 선택이 아니라 IDE가 명령어를 분류하는 방식입니다.

사용자 확장 프로그램 만드는 방법

1단계) 조치 모든 행동은 ~에서 시작됩니다 do만약 해당 동작이 텍스트를 대문자로 변환한다면, 그 동작의 이름은 다음과 같습니다. doText대문자이 액션 메서드를 추가하면 Selenium IDE 자체에서 일치하는 대기 메서드를 생성합니다. doText대문자 또한 대기 함수를 생성합니다. 텍스트대문자 그리고 기다리기이 메서드는 두 개의 매개변수를 받을 수 있습니다.

예: 대문자 텍스트 작업

Selenium.prototype.doTextUpperCase = function(locator, text) {
// Here findElement is itself capable to handle all type of locator(xpath,css,name,id,className), We just need to pass the locator text
var element = this.page().findElement(locator);

// Create the text to type
text = text.toUpperCase();

// Replace the element text with the new text
this.page().replaceText(element, text);
};

2단계) 접근자/어설션 – 모든 접근 제어자는 등록되어 있습니다. Selenium 객체 프로토타입은 접두사로 시작됩니다. 얻을 or is예를 들어 getValueFromCompoundTable 또는 isValueFromCompoundTable과 같은 메서드가 있습니다. 접근자는 대상과 테스트 케이스의 값 필드, 이렇게 두 개의 매개변수를 받을 수 있습니다. 아래 스크린샷은 확장 프로그램이 로드된 후 이러한 접두사가 어떻게 나타나는지 보여줍니다.

Selenium IDE에서 사용자 확장 프로그램에서 생성된 get 및 is 접근자 명령을 보여줍니다.

각 액세서리에 대해, Selenium IDE는 접두사가 붙은 해당 검증 함수를 생성합니다. 확인 단언하다, 그리고 접두사가 붙은 대기 함수가 추가됩니다. 기다려주세요.

예시: 대문자 텍스트 접근자의 경우

Selenium.prototype.assertTextUpperCase = function(locator, text) {
// All locator-strategies are automatically handled by "findElement"
var element = this.page().findElement(locator);

// Create the text to verify
text = text.toUpperCase();

// Get the actual element value
var actualValue = element.value;

// Make sure the actual value matches the expected
Assert.matches(expectedValue, actualValue);
};

Selenium.prototype.isTextEqual = function(locator, text) {
return this.getText(locator).value===text;
};

Selenium.prototype.getTextValue = function(locator, text) {
return this.getText(locator).value;
};

3단계) ​​위치 파악 전략 - 요소를 찾는 자체 함수를 만들려면 PageBot 프로토타입에 접두사가 붙은 함수를 추가하세요. 요소 찾기이 함수는 두 개의 매개변수를 받습니다. 하나는 위치 지정 문자열이고, 다른 하나는 요소를 검색할 문서입니다.

예: 대문자 텍스트 로케이터의 경우

// The "inDocument" is a document you are searching.
PageBot.prototype.locateElementByUpperCase = function(text, inDocument) {
// Create the text to search for
var expectedValue = text.toUpperCase();

// Loop through all elements, looking for ones that have
// a value === our expected value
var allElements = inDocument.getElementsByTagName("*");
// This star '*' is a kind of regular expression it will go through every element (in HTML DOM every element surely have a tag name like<body>,<a>,<h1>,<table>,<tr>,<td> etc. ). Here our motive is to find an element which matched with the Upper Case text we have passed so we will search it with all elements and when we get match we will have the correct web element.
for (var i = 0; i < allElements.length; i++) {
var testElement = allElements[i];
if (testElement.innerHTML && testElement.innerHTML === expectedValue) {
return testElement;
}
}
return null;
};

세 가지 함수를 하나의 파일에 저장하세요. 사용자 확장 프로그램.js파일은 일반 파일입니다. Java스크립트이므로 어떤 텍스트 편집기든 충분합니다.

새로 생성된 코어 확장 기능을 사용하는 방법

원래 방식에서 파일을 불러오는 것은 네 단계 작업입니다. Firefox- 플러그인 IDE. 아래 각 스크린샷은 옆에 있는 번호가 매겨진 단계에 해당합니다.

  1. We Buy Orders 신청서를 클릭하세요. Selenium IDE를 클릭하고 클릭하세요. 옵션 -> 옵션…

    Selenium IDE 옵션 메뉴가 열려서 옵션 대화 상자에 접근할 수 있습니다.

  2. . 일반 해당 섹션에서 새로 생성된 파일의 위치를 ​​선택하십시오. Selenium 핵심 확장 기능.

    Selenium IDE 옵션 대화 상자의 일반 탭 Selenium 코어 확장 파일 경로 필드

  3. OK 다시 시작 Selenium IDE.

    확인 메시지가 표시되는 경우 Selenium IDE가 확장 파일을 로드하기 위해 다시 시작됩니다.

  4. 명령어 목록에서 확장 프로그램을 찾을 수 있습니다.

    Selenium IDE 명령 드롭다운 메뉴에 user-extensions.js에 추가된 새로운 textUpperCase 명령이 표시됩니다.

Selenium 핵심 확장 기능 vs Selenium IDE 확장 기능

이 두 용어는 예전 자료에서 혼용되곤 했지만, 서로 다른 계층을 나타내는 용어이며, 사용자 정의 로직을 어디에 배치할지 결정할 때 그 차이점을 구분하는 것이 중요합니다.

아래 Selenium 핵심 확장 Selenium IDE 확장 프로그램
그것이 확장하는 것 재생 중에 사용되는 Selenese 명령 라이브러리 IDE 애플리케이션 자체
파일이 로드되었습니다. 사용자 확장 프로그램.js 기존 IDE의 user-extensions-ide.js, 현재 IDE의 플러그인 매니페스트
일반적인 사용 새로운 액션, 접근자 및 위치 지정 전략 새로운 메뉴 항목, 패널, 형식 및 레코더 동작
만진 물체 Selenium.prototype 및 PageBot.prototype IDE 편집기 및 레코더 API
실행 중 테스트 실행 저작 및 녹음

요약하자면, 코어 확장 기능은 테스트의 기능을 변경하고, IDE 확장 기능은 도구의 기능을 변경합니다.

현대는 어떻게 Selenium IDE는 user-extensions.js를 대체합니다.

The Firefox-플러그인 Selenium IDE가 작동을 멈춘 시점 Firefox 웹 확장 아키텍처로 전환되었고, IDE는 크롬 기반으로 재작성되었습니다. Firefox 그리고 Edge 브라우저 확장 프로그램도 마찬가지입니다. 해당 재작업으로 인해 위에 표시된 옵션 필드가 제거되었으므로 user-extensions.js 파일을 지정할 곳이 없습니다. 동일한 기능을 제공하는 두 가지 대안이 있습니다.

  • 스크립트 실행 명령. 일회성으로 Java스크립트, 추가 스크립트 실행 or 비동기 스크립트 실행 테스트에 직접 참여하여 결과를 변수에 저장합니다. 이는 간단한 사용자 지정 액션과 가장 유사한 방식입니다.
  • 플러그인입니다. 재사용 가능한 명령어를 만들려면 IDE에 매니페스트를 등록하는 브라우저 확장 프로그램을 빌드하세요. 매니페스트에는 각 새 명령어를 ID, 이름, 선택적 유형 및 문서와 함께 선언하고, 새 로케이터를 선언할 수도 있습니다.

매니페스트는 공식 문서에 나와 있는 것처럼 IDE 확장 프로그램에 메시지를 전송하여 등록됩니다. Selenium IDE 플러그인 문서.

browser.runtime.sendMessage(SIDE_ID, {
uri: "/register",
verb: "post",
payload: {
name: "Selenium IDE plugin",
version: "1.0.0",
commands: [
{ id: "textUpperCase", name: "text upper case" }
]
}
}).catch(console.error);

명명 규칙은 마이그레이션 후에도 유지됩니다. 플러그인 명령은 코어 확장 기능과 마찬가지로 한 번만 선언된 후 모든 테스트에서 재사용됩니다.

널리 사용되는 확장 기능 및 플러그인 Selenium IDE

아래 추가 기능들은 기존 IDE에서 가장 널리 사용되었던 것들입니다. 흐름 제어 및 오류 발생 시 스크린샷 저장과 같은 몇 가지 기능은 현재 IDE에 내장되어 있거나 유지 관리되는 플러그인으로 제공됩니다.

이름 목적
즐겨 찾기 테스트 스위트를 즐겨찾기에 추가하고 한 번의 클릭으로 실행하려면
플렉스 파일럿 X Flex 기반 자동화의 경우
플렉스몬키움 Adobe Flex 기반 녹음 및 재생용 테스트 in Selenium IDE
파일 로깅 로그를 파일로 저장하는 경우
흐름 제어 테스트 실행 흐름을 제어하려면
요소 강조 웹 컨트롤을 강조 표시하려면
암시적 대기 특정 시간 동안 요소를 기다리다
실패 시 스크린샷 실패 시 스크린샷 찍기
시험 결과 을 저장 테스트 사례 한 번의 클릭으로 테스트 스위트 결과 확인

이전 Selenium이 파일들을 호스팅했던 본사 다운로드 페이지는 더 이상 존재하지 않습니다. 현재 플러그인과 IDE 자체는 다음 경로를 통해 배포됩니다. Selenium IDE 프로젝트 사이트 그리고 크롬에서, Firefox 그리고 Edge 추가 기능 스토어.

를 다운로드 Selenium 이 튜토리얼에서 사용되는 핵심 확장

자주 묻는 질문

관례적인 이름은 user-extensions.js이며, IDE 수준의 추가 기능은 user-extensions-ide.js를 사용했습니다. 기존 IDE에서는 어떤 경로든 지정할 수 있었기 때문에 이름은 엄격한 요구 사항이라기보다는 관례에 가까웠지만,ping 이를 통해 공용 스위트룸을 더 쉽게 알아볼 수 있습니다.

IDE가 로드되는 동안에는 프로토타입 함수를 읽기 전용으로 처리하므로, 시작 후 수정된 내용은 무시됩니다. 파일을 저장하고 IDE를 완전히 종료한 후 다시 실행하세요. Java스크립트 구문 오류로 인해 전체 파일이 오류 메시지 없이 로드되지 않습니다.

브라우저 콘솔을 열고 IDE를 다시 시작한 다음 파일에서 구문 분석 오류가 발생하는지 확인하세요. 파일 맨 위에 `console.log` 줄을 추가하면 개별 함수 디버깅을 시작하기 전에 파일이 제대로 로드되었는지 확인할 수 있습니다.

do로 시작하는 버전만 작성하세요. Selenium IDE는 동일한 작업을 수행한 후 페이지 로딩이 완료될 때까지 기다리는 AndWait 변형을 자동으로 생성합니다. 탐색을 유발하는 액션이 ​​실행될 때 AndWait 형식을 사용하십시오.

머신러닝 모델은 새로운 명령에 대한 기본 코드를 작성하고 페이지 스냅샷을 기반으로 요소 찾기 전략을 제안할 수 있습니다. AI 기반 요소 찾기 수정 기능 또한 유용한데, 마크업이 변경될 때 오류가 발생하는 코드가 바로 사용자 지정 locateElementBy 함수이기 때문입니다.

부분적으로. Copilot은 다음을 재현합니다. Selenium`.prototype` 및 `PageBot.prototype` 패턴은 오래된 저장소에서 널리 나타나기 때문에 사용하는 것이 좋지만, 존재하지 않는 헬퍼 메서드를 생성할 수도 있습니다. 제안된 모든 호출을 신뢰하기 전에 Selenese 명령 참조와 비교하여 확인하십시오.

네. PageBot.prototype에 locateElementBy 함수만 포함된 파일도 유효합니다. 그러면 새로운 전략이 기존의 모든 명령에서 사용 가능해지므로 click, type, assert 명령 모두 해당 전략을 통해 요소를 대상으로 지정할 수 있습니다.

Selenium RC는 서버 전환을 통해 사용자 확장 파일(user-extensions file)을 수락했지만, RC와 Selenium 코어가 제거되었습니다. Selenium 3. WebDriver에는 이에 상응하는 훅이 없으므로, 동일한 로직을 테스트 프레임워크의 일반 헬퍼 메서드로 작성해야 합니다.

이 게시물을 요약하면 다음과 같습니다.