xpath axes dynamic xpath selenium webdriver
이 자습서에서는 사용 된 다양한 XPath 축, 구조의 예 및 설명을 사용하여 Selenium WebDriver의 동적 XPath에 대한 XPath 축을 설명합니다.
이전 튜토리얼에서 XPath 기능과 요소 식별의 중요성에 대해 배웠습니다. 그러나 둘 이상의 요소가 너무 유사한 방향과 명명법을 가지고 있으면 요소를 고유하게 식별하는 것이 불가능 해집니다.
=> 여기에서 완벽한 셀레늄 교육 가이드를 확인하십시오.
학습 내용 :
XPath 축 이해
예를 들어 위에서 언급 한 시나리오를 이해합시다.
'편집'텍스트가있는 두 개의 링크가 사용되는 시나리오를 생각해보십시오. 이러한 경우 HTML의 노드 구조를 이해하는 것이 적절 해집니다.
아래 코드를 메모장에 복사하여 붙여넣고 .htm 파일로 저장하십시오.
Edit Edit
UI는 아래 화면과 같습니다.
문제 설명
Q # 1) XPath 함수조차도 요소를 식별하지 못하면 어떻게해야합니까?
대답: 이 경우 XPath 함수와 함께 XPath 축을 사용합니다.
이 기사의 두 번째 부분에서는 계층 적 HTML 형식을 사용하여 요소를 식별하는 방법을 다룹니다. XPath 축에 대한 약간의 정보부터 시작하겠습니다.
Q # 2) XPath 축이란 무엇입니까?
대답: XPath 축은 현재 (컨텍스트) 노드에 상대적인 노드 집합을 정의합니다. 해당 트리의 노드와 관련된 노드를 찾는 데 사용됩니다.
Q # 3) 컨텍스트 노드 란 무엇입니까?
대답: 컨텍스트 노드는 XPath 프로세서가 현재보고있는 노드로 정의 할 수 있습니다.
셀레늄 테스트에 사용되는 다양한 XPath 축
아래에 나열된 13 개의 서로 다른 축이 있습니다. 그러나 Selenium 테스트 중에 모두 사용하지는 않을 것입니다.
- 선조 :이 축은 컨텍스트 노드와 관련된 모든 조상을 나타내며 루트 노드까지 도달합니다.
- 조상 또는 자신 : 이것은 컨텍스트 노드와 컨텍스트 노드와 관련된 모든 조상을 나타내며 루트 노드를 포함합니다.
- 속성: 컨텍스트 노드의 속성을 나타냅니다. '@'기호로 표시 할 수 있습니다.
- 아이: 이것은 컨텍스트 노드의 자식을 나타냅니다.
- 아래로 : 이것은 컨텍스트 노드의 자식, 손자녀 및 자식 (있는 경우)을 나타냅니다. 이것은 속성 및 네임 스페이스를 나타내지 않습니다.
- 후손 또는 자신 : 컨텍스트 노드의 컨텍스트 노드와 자식, 손자와 자식 (있는 경우)을 나타냅니다. 이것은 속성과 네임 스페이스를 나타내지 않습니다.
- 수행원: 이것은 나타나는 모든 노드를 나타냅니다. 후 HTML DOM 구조의 컨텍스트 노드. 이는 하위 항목, 속성 및 네임 스페이스를 나타내지 않습니다.
- 다음 형제 : 이것은 모든 형제 노드 (컨텍스트 노드와 동일한 부모)를 나타냅니다. 나타나다 HTML DOM 구조의 컨텍스트 노드 뒤. 이는 하위 항목, 속성 및 네임 스페이스를 나타내지 않습니다.
- 네임 스페이스 : 이것은 컨텍스트 노드의 모든 네임 스페이스 노드를 나타냅니다.
- 부모의: 이것은 컨텍스트 노드의 부모를 나타냅니다.
- 선행: 이것은 나타나는 모든 노드를 나타냅니다. 전에 HTML DOM 구조의 컨텍스트 노드. 이는 하위 항목, 속성 및 네임 스페이스를 나타내지 않습니다.
- 선행 형제 : 이것은 나타나는 모든 형제 노드 (컨텍스트 노드와 동일한 부모)를 나타냅니다. 전에 HTML DOM 구조의 컨텍스트 노드. 이것은 하위 항목, 속성 및 네임 스페이스를 나타내지 않습니다.
- 본인: 이것은 컨텍스트 노드를 나타냅니다.
XPath 축의 구조
XPath 축의 작동 방식을 이해하려면 아래 계층 구조를 고려하십시오.
위의 예에 대한 간단한 HTML 코드는 아래를 참조하십시오. 메모장 편집기에 아래 코드를 복사하여 붙여넣고 .html 파일로 저장하십시오.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
페이지는 다음과 같습니다. 우리의 임무는 XPath 축을 사용하여 요소를 고유하게 찾는 것입니다. 위의 차트에 표시된 요소를 식별 해 보겠습니다. 컨텍스트 노드는 '포유류'
# 1) 조상
일기: 컨텍스트 노드에서 상위 요소를 식별합니다.
XPath # 1 : // div (@ class =’포유류’) / ancestor :: div
Windows 10을위한 최고의 맬웨어 제거
XPath '// div (@ class =’Mammal’) / ancestor :: div'는 두 개의 일치하는 노드를 발생시킵니다.
- 척추 동물은“포유류”의 부모이기 때문에 조상으로 간주됩니다.
- 동물은“포유류”의 부모의 부모이므로 조상으로 간주됩니다.
이제 'Animal'클래스 인 요소 하나만 식별하면됩니다. 아래에 언급 된대로 XPath를 사용할 수 있습니다.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
텍스트“Animal”에 도달하려면 XPath 아래를 사용할 수 있습니다.
# 2) 조상 또는 자신
일기: 컨텍스트 노드에서 컨텍스트 노드와 상위 요소를 식별합니다.
XPath # 1 : // div (@ class =’포유류’) / ancestor-or-self :: div
위의 XPath # 1은 세 개의 일치하는 노드를 던집니다.
- 동물 (조상)
- 척골가 있는
- 포유류 (자체)
# 3) 어린이
일기: 컨텍스트 노드“Mammal”의 자식을 식별합니다.
XPath # 1 : // div (@ class =’포유류’) / child :: div
자바 인터뷰 질문에 SOAP 웹 서비스
XPath # 1 컨텍스트 노드 '포유류'의 모든 자식을 식별하는 데 도움이됩니다. 특정 자식 요소를 얻으려면 XPath # 2를 사용하십시오.
XPath # 2 : // div (@ class =’포유류’) / child :: div (@ class =’초식 동물’) / h5
# 4) 자손
일기: 컨텍스트 노드의 자식과 손자를 식별하기 위해 (예 : '동물').
XPath # 1 : // div (@ class =’동물’) / descendant :: div
Animal이 계층 구조의 최상위 멤버이므로 모든 하위 및 하위 요소가 강조 표시됩니다. 참조를 위해 컨텍스트 노드를 변경하고 원하는 요소를 노드로 사용할 수도 있습니다.
# 5) 후손 또는 자신
일기: 요소 자체와 그 하위 요소를 찾습니다.
XPath1 : // div (@ class =’동물’) / descendant-or-self :: div
후손과 후손 또는 자신의 유일한 차이점은 하위 항목을 강조 표시하는 것 외에도 자신을 강조한다는 것입니다.
# 6) 팔로 잉
일기: 컨텍스트 노드를 따르는 모든 노드를 찾습니다. 여기서 컨텍스트 노드는 Mammal 요소를 포함하는 div입니다.
XPath : // div (@ class =’포유류’) / following :: div
다음 축에서 컨텍스트 노드를 따르는 모든 노드 (하위 또는 하위)가 강조 표시됩니다.
# 7) 다음 형제
일기: 동일한 부모를 공유하고 컨텍스트 노드의 형제 인 컨텍스트 노드 뒤의 모든 노드를 찾습니다.
XPath : // div (@ class =’Mammal’) / following-sibling :: div
following-sibling과 follow-sibling의 주요 차이점은 following-sibling은 컨텍스트 뒤에 모든 형제 노드를 가지지 만 동일한 부모도 공유한다는 것입니다.
# 8) 선행
일기: 컨텍스트 노드 앞에 오는 모든 노드를 사용합니다. 부모 또는 조부모 노드 일 수 있습니다.
여기서 컨텍스트 노드는 무척추 동물이고 위 이미지에서 강조 표시된 선은 무척추 동물 노드 앞에 오는 모든 노드입니다.
# 9) 선행 형제
일기: 컨텍스트 노드와 동일한 부모를 공유하고 컨텍스트 노드 앞에 오는 형제를 찾습니다.
컨텍스트 노드가 무척추 동물이므로 강조되는 유일한 요소는 척추 동물입니다.이 두 가지는 형제이며 동일한 부모 '동물'을 공유하기 때문입니다.
# 10) 부모
일기: 컨텍스트 노드의 부모 요소를 찾으려면 컨텍스트 노드 자체가 조상이면 부모 노드가 없으며 일치하는 노드를 가져 오지 않습니다.
컨텍스트 노드 # 1 : 포유류
XPath : // div (@ class =’포유류’) / parent :: div
컨텍스트 노드가 Mammal이므로 Vertebrate가있는 요소가 Mammal의 부모이므로 강조 표시됩니다.
컨텍스트 노드 # 2 : 동물
XPath : // div (@ class =’동물’) / parent :: div
동물 노드 자체가 조상이므로 노드가 강조 표시되지 않으므로 일치하는 노드가 없습니다.
# 11) 자기
일기: 컨텍스트 노드를 찾기 위해 self가 사용됩니다.
컨텍스트 노드 : 포유류
XPath : // div (@ class =’포유류’) / self :: div
위에서 볼 수 있듯이 Mammal 개체는 고유하게 식별되었습니다. 아래 XPath를 사용하여 '포유류'라는 텍스트를 선택할 수도 있습니다.
XPath : // div (@ class =’포유류’) / self :: div / h4
선행 및 후속 축의 사용
대상 요소가 컨텍스트 노드에서 앞뒤로 몇 개의 태그인지 알고 있다고 가정하면 모든 요소가 아닌 해당 요소를 직접 강조 표시 할 수 있습니다.
예 : 선행 (색인 포함)
컨텍스트 노드가 '기타'라고 가정하고 '포유류'요소에 도달하려고하면 아래 접근 방식을 사용합니다.
첫 번째 단계: 인덱스 값을 제공하지 않고 간단히 선행을 사용하십시오.
XPath : // div (@ class =’기타’) / preceding :: div
이것은 우리에게 6 개의 매칭 노드를 제공하고 우리는 오직 하나의 타겟 노드“포유류”를 원합니다.
두번째 단계: 인덱스 값 (5)을 div 요소에 제공합니다 (컨텍스트 노드에서 위쪽으로 계산).
XPath : // div (@ class =’기타’) / preceding :: div (5)
이러한 방식으로 '포유류'요소가 성공적으로 식별되었습니다.
예 : 다음 (인덱스 포함)
컨텍스트 노드가 'Mammal'이고 'Crustacean'요소에 도달하려고한다고 가정 해 보겠습니다. 아래 접근 방식을 사용합니다.
첫 번째 단계: 인덱스 값을 제공하지 않고 다음을 사용하십시오.
XPath : // div (@ class =’포유류’) / following :: div
이것은 우리에게 4 개의 매칭 노드를 제공하고 우리는 오직 하나의 타겟 노드“Crustacean”을 원합니다
두번째 단계: 인덱스 값 (4)을 div 요소에 제공합니다 (컨텍스트 노드에서 앞서 계산).
XPath : // div (@ class =’기타’) / following :: div (4)
이렇게하면“갑각류”요소가 성공적으로 식별되었습니다.
위의 시나리오는 다음을 사용하여 다시 만들 수도 있습니다. 선행 형제 과 다음 형제 위의 접근 방식을 적용하여.
결론
객체 식별은 웹 사이트 자동화에서 가장 중요한 단계입니다. 물체를 정확하게 학습하는 기술을 습득 할 수 있다면 자동화의 50 %가 완료됩니다. 요소를 식별하는 데 사용할 수있는 로케이터가 있지만 로케이터조차도 객체를 식별하지 못하는 경우가 있습니다. 그러한 경우 우리는 다른 접근 방식을 적용해야합니다.
여기서는 요소를 고유하게 식별하기 위해 XPath 함수와 XPath 축을 사용했습니다.
웹 서비스를 어떻게 테스트합니까
기억해야 할 몇 가지 사항을 적어 두어이 기사를 마칩니다.
- 컨텍스트 노드 자체가 조상 인 컨텍스트 노드에 '상위'축을 적용하면 안됩니다.
- 컨텍스트 노드 자체가 조상 인 컨텍스트 노드에 '상위'축을 적용해서는 안됩니다.
- 컨텍스트 노드 자체가 하위 항목 인 컨텍스트 노드에 '하위'축을 적용하면 안됩니다.
- 컨텍스트 노드 자체가 조상 인 컨텍스트 노드에 '하위'축을 적용하면 안됩니다.
- HTML 문서 구조의 마지막 노드 인 컨텍스트 노드에 '다음'축을 적용하면 안됩니다.
- HTML 문서 구조의 첫 번째 노드 인 컨텍스트 노드에 '이전'축을 적용하면 안됩니다.
행복한 학습 !!!
=> 독점적 인 Selenium 교육 자습서 시리즈를 보려면 여기를 방문하십시오.
추천 도서
- Selenium의 동적 XPath에 대한 XPath 함수
- Cucumber Selenium 튜토리얼 : Cucumber Java Selenium WebDriver 통합
- Selenium 로케이터 : Selenium에서 XPath를 사용하여 웹 요소 식별 (예제)
- Selenium WebDriver 소개 – Selenium Tutorial # 8
- ChromeDriver Selenium 자습서 : Chrome에서 Selenium Webdriver 테스트
- 첫 번째 WebDriver 스크립트 구현 – Selenium WebDriver Tutorial # 10
- 30 개 이상의 최고의 셀레늄 튜토리얼 : 실제 예제로 셀레늄 배우기
- Selenium 스크립트에서 웹 테이블, 프레임 및 동적 요소 처리 – Selenium Tutorial # 18