자동 테스트에서는 AUT(테스트 중인 애플리케이션)의 웹 요소를 인식할 수 있는 것이 중요합니다. 웹 요소를 찾는 방법을 배우고 Selenium에서 동적 XPath를 수동으로 작성하는 데는 오랜 시간과 많은 연습이 필요할 수 있습니다.
예를 들어 XPath를 사용하여 Selenium에서 웹 요소를 수동으로 쉽게 찾는 방법을 보여 드리겠습니다.
로케이터는 Selenium의 중요한 기능 중 하나입니다. 이를 통해 웹 요소를 찾을 수 있습니다. 예를 들어 ID, 클래스 이름, 이름, 링크 텍스트 등과 같은 위치 지정자가 웹 요소를 찾지 못하는 경우 XPath를 사용하여 웹 페이지에서 해당 요소를 찾습니다.
XML Path라고도 알려진 XPath는 페이지의 HTML 구조를 탐색하기 위해 Selenium WebDriver에서 가장 일반적으로 사용되는 위치 지정자 중 하나입니다. HTML 및 XML 문서의 HTML DOM 구조를 사용하여 웹페이지의 모든 요소를 찾는 데 사용할 수 있습니다.
XPath는 XML 문서 탐색을 통해 특정 처리를 위해 XML 문서의 개별 요소, 속성 또는 기타 부분을 선택할 수 있도록 하기 위한 것입니다. 예를 들어 XPath는 신뢰할 수 있는 로케이터를 생성하지만 CSS Selector보다 성능 측면에서 느립니다.
언어 XPath는 HTML 페이지에서 요소를 선택하는 데 사용됩니다. XPath를 사용하면 태그 이름, ID, CSS 클래스 등을 기반으로 페이지의 모든 요소를 찾을 수 있습니다. Selenium에는 두 가지 유형의 XPath가 있습니다.
요소를 찾는 가장 직접적인 방법이지만 "절대 XPath"의 단점은 요소의 경로가 변경되면 해당 특정 XPath가 실패한다는 것입니다.
XPath의 중요한 특징은 단일 슬래시(/)로 시작한다는 것입니다. 이는 동적 XPath를 사용하여 루트 노드에서 요소를 선택할 수 있음을 나타냅니다.
상대 XPath는 루트 노드가 아닌 선택한 노드에서 경로가 시작되는 XPath입니다.
상대 XPath를 사용하면 전체 XPath를 지정할 필요가 없다는 이점이 있습니다. 대신 중간이나 그 사이 어딘가에서 시작할 수 있습니다.
*단점: *
정확한 경로가 아닌 부분 경로를 지정하기 때문에 요소 식별에 시간이 더 오래 걸립니다.
동일한 경로에 여러 요소가 있는 경우 식별된 첫 번째 요소가 선택됩니다.
컨텍스트(현재) 노드에서 XPath 축은 XML 문서의 다른 노드를 검색합니다. 예를 들어 해당 트리에 가장 가까운 노드를 찾는 데 사용됩니다.
XPath 축은 ID, 클래스 이름, 이름 또는 기타 식별자를 포함하지 않는 표준 XPath 방법을 사용하여 찾을 수 없는 동적 요소를 찾는 방법입니다.
Axes 메서드는 새로 고침이나 기타 작업으로 인해 동적으로 변경되는 요소를 찾는 데 사용됩니다. 예를 들어 Selenium Webdriver에서는 자식, 부모, 조상, 형제, 선행, 자기 및 기타 축 방법이 일반적으로 사용됩니다.
AUT 변경이 테스트 자동화, 특히 소프트웨어 개발 초기 단계에서 가장 복잡하고 시간이 많이 걸리는 작업 중 하나일 때 그들은 테스트 스크립트를 수정하고 있었습니다.
결과적으로 개발자는 한 빌드에서 다른 빌드로 식별자와 요소를 자주 변경할 수 있습니다. 또한 AUT의 요소는 실행 중에 동적으로 변경될 수 있습니다.
이러한 문제를 해결하려면 자동화 테스터는 테스트 사례 요소에 대해 고정 XPath를 설정하는 대신 특정 패턴을 기반으로 XPath를 동적으로 스크립팅해야 합니다.
Selenium에서 동적 XPath를 생성하는 11가지 독특하고 다양한 방법은 다음과 같습니다.
real-device-cloud-cta.jpg
이 메커니즘은 절대 XPath 요소 검색이라고도 합니다.
구문:
html/body/div[1]/div[2]/div[2]/div[1]/form/div[1]/div/div[1]/div/div/input[1]
단일 슬래시는 절대 경로가 있는 XPath를 생성하는 데 사용됩니다. 즉, XPath는 문서 노드/시작 노드/상위 노드에서 선택을 시작하도록 설계되었습니다.
이 메커니즘을 상대 XPath로 요소 찾기라고도 합니다.
이중 슬래시는 상대 경로가 있는 XPath를 만드는 데 사용됩니다. 즉, XPath는 문서의 어느 곳에서나 선택을 시작할 수 있습니다. 그런 다음 전체 페이지(DOM)에서 이전 문자열을 찾습니다.
구문
//form/div[1]/div/div[1]/div/div/input[1]
구문은 아래와 같이 두 가지 방법으로 작성할 수 있습니다. HTML 태그 포함 또는 제외. HTML 태그를 제외하려면 *를 사용해야 합니다.
구문
//[@attribute_name='attribute_value']
아니면
//*[@attribute_name='attribute_value']
구문
//[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
아니면
//*[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
구문
//[@attribute_name1='attribute_value1' 및 @attribute_name2='attribute_value2]
아니면
//*[@attribute_name1='attribute_value1' 및 @attribute_name2='attribute_value2]
구문
//[@attribute_name1='attribute_value1' 또는 @attribute_name2='attribute_value2]
아니면
//*[@attribute_name1='attribute_value1' 또는 @attribute_name2='attribute_value2]
Contains()는 요소의 속성 값 중 일부에 익숙해졌을 때 동적으로 변경되는 요소를 식별하는 방법입니다.
요소의 속성 값(지정된 텍스트로 시작)에 익숙해지면 start-with() 메서드를 사용하여 이를 식별할 수 있습니다.
구문
//[contains(@attribute_name,'attribute_value')]
아니면
//*[contains(@attribute_name,'attribute_value')]
이 메커니즘은 웹페이지의 텍스트를 기반으로 요소를 찾는 데 사용됩니다.
Last()는 모든 입력 요소에서 (지정된 유형의) 마지막 요소를 선택합니다.
구문
//[text()='새로운 로그인 디자인 출시 예정']
아니면
//[text()='새 로그인 디자인이 곧 출시됩니다.']
요소는 제공된 위치 번호를 기준으로 모든 입력 요소 중에서 선택됩니다.
다음 XPath에서 [@type='text']는 텍스트 필드를 찾고, [position()=2] 함수는 위에서 두 번째 위치에 있는 텍스트 필드를 식별합니다.
구문
findElement(By.xpath("(//input[@type='text'])[position()=2]"))
아니면
findElement(By.xpath("(//input[@type='text'])[2]"))
인덱스 위치를 대괄호 안에 넣으면 n번째 요소에 접근할 수 있습니다. 그런 다음 아래 XPath를 사용하여 성 필드를 식별할 수 있었습니다.
구문
findElement(By.xpath("//label[2]"))
조상, 속성 노드, 네임스페이스 노드를 제외하고 문서에서 현재 노드 앞에 나타나는 모든 노드를 선택합니다.
WebElement 선택 = 드라이버.findElement(By.id(“성별”));
목록 옵션 = select.findElements(By.tagName(“남성”));
for (WebElement 옵션 : 옵션) {
if(“독일”.equals(option.getText()))
option.click();
selectByValue() 사용
선택 목록 상자 = 새 Select(드라이버.
목록 상자.
목록 상자 선택 = 새로운 Select(driver.
WebElement 옵션 = listbox.getFirstSelectedOption();
System.out.println(option.getText()); //선택한 옵션을 인쇄합니다.
//선택한 옵션을 모두 나열합니다.
//모든 옵션을 나열합니다.
동적 요소는 ID뿐만 아니라 클래스 이름, 값 등과 같은 모든 속성이 고정되지 않은 웹 요소입니다.
따라서 페이지를 새로고침할 때마다 페이지가 변경됩니다. 결과적으로 로케이터만으로는 해당 요소를 처리할 수 없습니다.
예를 들어 Gmail 받은 편지함 요소의 클래스 이름은 로그인할 때마다 변경됩니다.
데이터베이스 기반 또는 세션 기반 동적 요소 데이터베이스 요소를 변경하면 테스트 중인 여러 애플리케이션 영역에 영향을 미칩니다.
동적 요소는 디자인에 형식이 배치되어 있어 엄격하게 내용을 담고 있습니다. 텍스트 상자와 버튼은 일반적으로 동적 식별자와 함께 사용됩니다.
동적 웹사이트를 자동화하면 콘텐츠가 변경되자마자 스크립트가 중단되어 테스트가 실패하게 됩니다. 그런 다음 매번 테스트 사례를 업데이트해야 하는데 이는 시간이 많이 걸리는 작업입니다.
페이지가 다시 로드되거나 새 세션이 시작될 때 이러한 요소가 어떻게 작동하는지 항상 이해해야 합니다. 이러한 요소를 이해하면 이러한 요소와 상호 작용하는 전략을 준비할 수 있습니다.
Selenium의 부분 링크 선택기와 유사하게 시작 텍스트 일치 요소와 함께 Xpath 검색을 사용할 수 있습니다.
컨텍스트 노드를 따르는 모든 노드는 다음과 같습니다. 웹 요소 목록에서 아래 나열된 요소를 지정하려면 '다음'을 사용할 수 있습니다.
정적 값을 포함하는 동적 요소는 거의 없습니다. 그 가치를 기반으로; 'contains' 기능을 사용하여 이러한 요소를 검색할 수 있습니다. 예를 들어 위의 HTML 버튼 클래스 이름에는 정적 문자열 'Hstpl-12345'가 있습니다. 예를 들어 XPath를 사용하여 클래스 이름에 'Hstpl'이라는 단어가 포함된 버튼 요소를 찾을 수 있습니다.
DOM에 유사한 속성을 가진 여러 요소가 있는 경우, 특히 동적인 경우 검색하기 어려울 수 있습니다.
예를 들어 페이지에 10개의 버튼이 있고 다섯 번째 버튼을 찾고 싶다고 가정해 보겠습니다. 그런 다음 '버튼' 태그가 있는 요소를 찾고 버튼 목록의 다섯 번째 인덱스로 이동하여 해당 요소를 찾습니다.
Absolute Xpath는 루트 요소부터 특정 요소까지의 전체 경로를 사용합니다. 아래에 표시된 것처럼 절대 Xpath는 HTML과 슬래시(/)로 시작됩니다. Xpath를 생성하려면 화재 경로(firebug)를 사용하십시오.
그러나 DOM의 사소한 변경으로 인해 오류가 발생하거나 다른 요소를 참조하기 때문에 회귀 가능성이 더 높습니다.
따라서 절대 Xpath를 사용하는 것은 대부분의 경우 모범 사례로 간주되지 않지만 동적 요소 문제를 해결합니다.
동적 요소를 처리하는 또 다른 방법은 동일한 태그 이름을 가진 모든 요소를 찾은 다음 텍스트, 값 또는 요소 속성이 포함되어 있는지 여부에 따라 필요한 요소를 검색하는 것입니다.
이 기사에서는 HTML DOM 구조의 요소를 고유하게 식별하기 위해 속성 및 텍스트와 함께 XPath 함수인 contain(), start-with() 및 text()를 사용하는 방법을 보여주었습니다.
Selenium에서는 다른 로케이터가 실패할 때 XPath를 사용하여 요소를 찾습니다. Selenium XPath에는 절대 XPath와 상대 XPath의 두 가지 유형이 있습니다.
출처: 이 기사는 원래 testgrid.io에 게시되었습니다.
위 내용은 Selenium에서 동적 XPath를 작성하고 처리하는 방법 [전술 사용]의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!