xpath functions dynamic xpath selenium
이 자습서에서는 예제를 사용하여 요소 식별에서 XPath 함수의 사용법을 설명합니다.
웹 사이트를 자동화하기 전에 객체를 올바르게 식별해야 동일한 작업을 수행 할 수 있습니다. 요소를 식별하는 가장 쉬운 방법은 ID, 이름, 링크, 클래스 또는 요소가있는 태그와 함께 사용할 수있는 기타 고유 속성과 같은 속성을 사용하는 것입니다.
이는 이러한 속성이 존재하거나 고유하여 개체가 올바르게 식별 될 때만 가능합니다.
학습 내용 :
XPath 기능 개요
속성을 쉽게 사용할 수없는 시나리오에 대해 살펴 보겠습니다.
문제 설명
요소 태그에서 ID, 이름, 클래스, 링크 등과 같은 로케이터를 사용할 수없는 경우 요소를 어떻게 식별합니까?
이것은 주어진 예를 통해 명확하게 이해할 수 있습니다.
로그인 트위터
위 스크린 샷에서 볼 수 있듯이 'Log in to Twitter'헤더에는 첨부 된 속성이 없습니다. 하지만 ID, 클래스, 링크 또는 이름과 같은 로케이터를 사용하여이 요소를 식별 할 수는 없습니다.
4 년 경력의 수동 테스트 인터뷰 질문
Firefox 도구의 Firepath 플러그인은 다음과 같은 XPath를 생성했습니다.
// * (@ id =’page-container’) / div / div (1) / h1
동적으로 변경 될 수 있으므로 위의 XPath를 페이지 구조 또는 ID로 사용하지 않는 것이 좋습니다. 이 불안정한 XPath를 사용하면 XPath를 더 자주 변경해야하므로 유지 관리에 더 많은 시간이 소요됩니다. ID, 클래스, 이름 또는 링크와 같은 로케이터와 함께 일반 XPath 표현식을 사용할 수없는 경우입니다.
해결책
텍스트로 XPath 함수를 사용하여 요소 식별
'Log in to Twitter'라는 텍스트가 표시되므로 다음을 사용합니다. XPath 함수 요소를 고유하게 식별합니다.
- contains () (텍스트로)
- starts-with () (텍스트로)
- 본문()
contains (), starts-with () 및 text ()와 같은 XPath 함수를 'Log in to Twitter'텍스트와 함께 사용하면 요소를 올바르게 식별하는 데 도움이되며 동일한 작업을 추가로 수행 할 수 있습니다.
# 1) Contains () 메서드 :
통사론: 'Log in to Twitter'웹 요소를 찾으려면 contains () 메서드를 포함하는 다음 XPath 표현식 중 하나를 사용하십시오.
텍스트로
- // h1 (contains (text (),’로그인 위치’))
- // h1 (contains (text (),’in to Twitter’))
참고 : 일치하는 노드 1 개는 웹 요소가 성공적으로 식별되었음을 나타냅니다.
위의 예에서 contains () 메서드는 요소를 올바르게 식별하기 위해 절대 (전체) 텍스트가 필요하지 않음을 알 수 있습니다. 부분적인 텍스트는 올바르게 식별하기에 충분합니다. 그러나 선택한 부분 텍스트는 고유해야합니다. 사용자는 contains () 메서드를 사용하여 페이지의 방향이 변경된 경우에도 요소를 쉽게 식별 할 수 있습니다.
contains () 메소드와 함께 절대 텍스트“Log in to Twitter”를 사용하더라도 요소가 올바르게 식별됩니다.
# 2) Starts-with () 메서드 :
통사론: “Log in to Twitter””웹 요소를 찾으려면 starts-with () 메서드가있는 다음 샘플 XPath 표현식을 사용하십시오.
텍스트로
- // h1 (starts-with (text (), '로그인'))
- // h1 (starts-with (text (), '로그인 대상'))
위의 예에서 XPath 함수 starts-with () 메서드는 요소를 고유하게 식별하기 위해 표시되는 텍스트의 첫 번째 단어 ( 'Log') 이상이 필요하다는 것이 분명합니다. 부분 텍스트에서도 작동하며 부분적으로 보이는 텍스트의 첫 단어를 포함하지 않으면 실패합니다.
starts-with () 메소드와 함께 절대 텍스트“Log in to Twitter”를 사용하더라도 요소가 올바르게 식별됩니다.
starts-with ()에 대한 잘못된 XPath : // h1 (starts-with (text (), 'in to Twitter'))
노트 : 일치하는 노드가 없다는 것은 웹 요소가 식별되지 않았 음을 나타냅니다.
# 3) Text () 메서드 :
통사론: “Log in to Twitter”웹 요소를 찾으려면 text () 메서드가있는 다음 XPath 표현식을 사용하십시오.
이 표현식에서는 시작 태그 사이에있는 절대 텍스트를 사용합니다. contains () 및 starts-with ()에서와 같이 부분 Xpath와 함께 text () 함수를 사용하면 요소를 찾을 수 없습니다.
text ()에 대한 잘못된 Xpath :
속성 별 XPath 함수를 사용하여 요소 식별
컨테이너 태그에서 사용할 수있는 고유하게 식별 된 속성 값이있는 경우 속성과 함께 XPath 함수 (포함 또는 시작 문자)를 사용합니다. 속성은 '@'기호를 사용하여 액세스합니다.
이것은 주어진 것으로 명확하게 이해할 수 있습니다 예:
로그인 구글
# 1) Contains () 메서드 :
통사론: 속성의 도움으로 XPath 함수 contains ()를 사용하여 'I 'm Feeling Lucky'버튼 요소를 고유하게 식별합니다.
(i) 값 속성 별 :
- // input (contains (@value,’느낌’))
- // input (contains (@ value,’Lucky’))
위의 이미지에서 'Feeling'또는 'Lucky'를 contains () 메서드와 함께 사용하면 요소를 고유하게 식별 할 수 있음을 알 수 있습니다. 그러나 Value 속성의 전체 내용을 사용하더라도 요소를 올바르게 식별한다는 점에 유의해야합니다.
(ii) 이름 별 속성 :
//input(contains(@name=’btnI’))
속성이있는 XPath 함수에 대한 유효하지 않은 케이스 :
contains () 및 starts-with () 메서드와 함께 사용할 속성을 선택하는 데 매우주의해야합니다. 속성 값이 고유하지 않으면 요소를 고유하게 식별 할 수 없습니다.
'I 'm Feeling Lucky'버튼을 식별 할 때 'type'속성을 사용하면 XPath가 작동하지 않는다고 가정합니다.
2 개의 일치 노드는 요소가 올바르게 식별되지 않았 음을 나타냅니다. 여기서 유형 속성 값은 고유하지 않습니다.
# 2) Starts-with () 메서드 :
어트리뷰트가있는 starts-with () 메서드는 어트리뷰트의 이전 부분이 고정 된 상태로 유지되고 나중 부분이 계속 변경되는 요소를 찾아야 할 때 매우 유용합니다. 이 접근 방식은 개체가 속성 값을 동적으로 변경할 때 매우 유용합니다. 비슷한 종류의 요소를 캡처하려는 경우에도 사용할 수 있습니다.
이동 Facebook 로그인
가입 양식의 첫 번째 텍스트 상자 '이름'과 두 번째 텍스트 상자 '성'을 검사합니다.
첫 번째 텍스트 상자 '이름'이 식별됩니다.
두 번째 텍스트 상자 'Surname'이 식별됩니다.
Facebook에 가입하기 위해 식별 된 두 텍스트 상자에서 id 속성의 시작 부분은 변경되지 않습니다.
이름 ID =“u_0_2”
성 id =’u_0_4”
이는 이러한 유형의 id 속성 아래에있는 모든 요소를 가져 오기 위해 starts-with () 속성을 사용할 수있는 시나리오입니다. 이 두 필드는 참조 용으로 만 사용됩니다. 그러나 화면에 'u_0_'로 시작하는 ID가있는 필드가 더있을 수 있습니다.
Starts-with () (속성 ID 별)
//input(starts-with(@id,”u_0_”))
중요 사항: 여기에서는 작은 따옴표 대신 큰 따옴표를 사용했습니다. 그러나 작은 따옴표는 starts-with 메서드에서도 작동합니다.
11 개의 일치 노드는이 XPath가 해당 ID가 'u_0_'로 시작하는 모든 요소를 식별했음을 나타냅니다. ID의 뒷부분 (이름은 2, 성은 4 등)이 요소를 고유하게 식별하는 방법을 결정합니다.
목록에서 유사한 유형의 요소를 수집해야하는 경우 starts-with 함수 속성을 사용하고 요소를 고유하게 식별하기 위해 제네릭 메소드에서 인수를 우회하여 동적으로 그중 하나를 선택할 수 있습니다.
아래 예제를 따라 시작 기능을 우리의 이점으로 사용하십시오.
샘플 코드 :
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
노트 : Eclipse는 큰 따옴표 사용을 허용하지 않을 수 있습니다. 동적 XPath를 만들기 위해 다른 코드를 사용해야 할 수도 있습니다.
샘플 코드는 참조 용으로 제공됩니다. 수행하려는 모든 요소와 작업 및 입력하려는 값 (텍스트 필드의 경우)에 맞게 확장하여 코드를보다 다양하게 만들 수 있습니다.
결론
이 기사에서는 HTML DOM 구조의 요소를 고유하게 식별하기 위해 XPath 함수 contains (), starts-with () 및 text () 속성 및 텍스트를 사용하는 방법을 설명했습니다.
다음은 XPath 함수에 대해 그릴 수있는 몇 가지 관찰입니다.
- 부분 상수 표시 텍스트 또는 속성을 알고있는 경우 XPath에서 'contains ()'메소드를 사용하십시오.
- 초기 부분 상수 표시 텍스트 또는 속성을 알고있는 경우 XPath에서 'starts-with ()'메서드를 사용하십시오.
- 절대 텍스트 또는 속성과 함께 contains () 및 starts-with () 메서드를 사용할 수도 있습니다.
- 절대적으로 보이는 텍스트를 알고 있다면 XPath에서 'text ()'메서드를 사용하십시오.
- 부분 텍스트에는 text () 메서드를 사용할 수 없습니다.
- XPath에서 초기 텍스트를 사용하지 않거나 초기 텍스트가 계속 변경되는 경우 starts-with () 메서드를 사용할 수 없습니다.
다음 튜토리얼에서는 사용 가능한 웹 페이지에서 요소의 위치를 더욱 향상시키기 위해 XPath 함수와 함께 XPath 축을 사용하는 방법을 학습 할 것입니다.
=> Easy Selenium 교육 시리즈를 읽어보십시오.
추천 도서
- Selenium 로케이터 : Selenium에서 XPath를 사용하여 웹 요소 식별 (예제)
- Selenium 스크립트에서 웹 테이블, 프레임 및 동적 요소 처리 – Selenium Tutorial # 18
- 파이썬 문자열 함수
- JMeter의 Xpath 추출기 포스트 프로세서
- 예제와 함께 텍스트 자습서로 셀레늄 찾기 요소
- Cucumber Selenium 튜토리얼 : Cucumber Java Selenium WebDriver 통합
- 포괄적 인 XPath 자습서-XML 경로 언어
- Selenium WebDriver 소개 – Selenium Tutorial # 8