2012-10-24 3 views
3

WebDriver.findElement 및 WebDriver.findElements 대신 자주 사용하는 사용자 지정 찾기 메서드가 있습니다. 이러한 메서드는 By 로케이터와 정규식을 모두 포함하는 사용자 지정 로케이터 개체를 사용하고 By 로케이터와 일치하고 정규 표현식과 일치하는 텍스트를 가진 WebElement 또는 WebElements를 반환합니다.새로운 찾기 메서드를 사용하여 WebElement 확장

이들은 수많은 경우에 매우 유용하며 동일한 기능을 WebElement.findElement 및 WebElement.findElements에 제공하고 싶습니다. WebElement 인터페이스를 구현하는 새 클래스를 만들 수 있으며 이러한 새로운 find 메서드도 포함되어 있지만 실제로 작동하는지 여부는 혼란 스럽습니다. 결국 FireFox에 대해 실행할 때 드라이버가 반환하는 요소는 FireFoxWebElements입니다. IE와 비교할 때 InternetExplorerElements입니다. 이 두 가지 모두 WebElement를 구현하지만 WebElement를 구현하는 사용자 정의 클래스와 완전히 관련이 없습니다. 맞습니까? 그들은이 여분의 기능을 가지지 않을 것이고, 그들은 나의 커스텀 클래스로서 다루어 질 수 없다.

WebElement가 WebElements의 유일한 "소스"이기 때문에 WebElements가 내 코드에 도착하는 근본적인 방법이므로 사용자 정의 findElement 메서드를 변경할 수 있습니다 (WebDriver .findElement (s), 궁극적으로) 내 특별한 element.find 메소드가 포함 된 WebElement에 대한 새 사용자 정의 래퍼를 반환 하시겠습니까? 그런 식으로 내 코드에 도착한 모든 WebElements는 내가 원하는 추가 찾기 메서드로 이러한 사용자 지정 요소가됩니다. 권리? 그렇다면, 래퍼 클래스는 어떻게 생겼을까요?

+0

여기까지 확장하려면 셀레늄을 완전히 포기하는 방법에 대해 생각해보십시오. – Arran

+0

@Arran 멀리 갈 필요가 없습니다. 모든 것을 완전히 다시 구현하지 않고도 동일한 목표를 달성 할 수있는 가능성이 높습니다. – JimEvans

+0

@JimEvans, 요점은, 항상 좋은 dev 에의 한에서 그것을 듣고. – Arran

답변

4

더 깨끗한 접근법은 By 클래스를 서브 클래스 화하고 By.findElement()By.findElements()에 대한 사용자 정의 구현을 제공하는 것입니다. 이 아키텍처는 이러한 유형의 확장성에 맞게 설계되었습니다. 이 By 하위 클래스는 findElement()findElements() 메서드에 대한 인수로 WebDriverWebElement 모두 아무 문제없이 전달 될 수 있습니다.

또는 맞춤 검색 방법을 다시 사용할 수도 있습니다. 현재 WebDriver 개체를 가져 오는 경우 WebDriverWebElement 확장되는 인터페이스 인 SearchContext 인수를 사용하도록 변경하는 것이 좋습니다. SearchContextfindElement()findElements() 메소드의 실제 소스입니다.

+0

'By' 객체를 서브 클래 싱하는 것은 좋은 계획처럼 들립니다. 'WebDriver.findElement (By)'를 호출하면, By.findElement (SearchContext)에있는'findElement' 메쏘드의 실제 '고기'라고 이해할 수 있을까요? 그래서,'WebDriver.findElement (By)'와'WebElement.findElement (By)'do는'By.findElement'를'SearchContext'로 사용합니다. 조언 주셔서 대단히 감사합니다. –

+1

언어 바인딩에 따라 네 사이즈 정도입니다. – JimEvans

관련 문제