GUI 오브젝트는 상위-하위 및 소유자-피소유자와 같이 두 개의 관련된 계층으로 배열됩니다. 상위-하위 관계의 예로는 대화 상자와 이에 포함된 단추를 들 수 있습니다. 소유자-피소유자 관계의 예로는 최상위 레벨 창과 대화 상자를 들 수 있습니다. 오브젝트에 맞는 계층 유형을 어느 것이든 한 가지 사용하십시오.
프록시 구현 시 Java™ 및 HWND와 같은 기본 오브젝트 모델에서 이 두 가지 관계를 혼동하여 소유자-피소유자 관계를 비대칭 상위-하위 관계로 취급하는 일이 흔히 발생합니다. 이런 경우 더 적합한 관계 모델이 소유자/피소유자인 경우에는 프록시에서 상위항목을 갖는 것을 거부해야 합니다. 계층 구조를 처리하는 데 사용할 수 있는 메소드는 getParent(), getChildren(), getOwner() 및 getOwned()입니다.
특성은 이름이 지정된 값입니다. 특성 자체에는 유형이 없으나 값에는 유형이 있습니다. 프록시가 동일한 특성에 대해 다른 유형을 리턴하지 않게 하십시오. 때때로 특성 값은 값이 아닌 오브젝트의 참조가 될 수 있습니다. 이러한 값이 스크립트에 리턴되는 경우 해당 값은 TestObject로 리턴됩니다. 특성에 액세스할 수 있는 메소드에는 getProperty(), setProperty(), getProperties() 및 getNonValueProperties()가 포함됩니다.
기본적으로 새 프록시 오브젝트에는 오브젝트 인식 특성 및 중량이 없습니다. 오브젝트 라이브러리를 사용하여 인식 특성 및 중량을 지정하십시오. 오브젝트 인식 특성 및 중량에 액세스하는 메소드에는 getRecognitionProperties() 및 getRecognitionPropertyWeight()가 있습니다. 상위 오브젝트에 둘 이상의 동일한 클래스 오브젝트가 있는 경우 하위 오브젝트의 인식 특성으로 .classIndex 특성(0에서 시작하는 양수 값)을 추가하십시오.
일반적으로는 오브젝트의 전체 계층이 맵핑됩니다. 그러나 특정 오브젝트는 테스트 응용프로그램의 빌드 사이에서 자주 변경될 가능성이 높습니다. 예를 들어, Java의 경우 클러스터 오브젝트에 패널을 함께 추가하는 것이 일반적입니다. Functional Tester를 사용하면 프록시 오브젝트를 맵핑하지 않도록 사용자가 지정할 수 있습니다. 맵핑할 수 없는 오브젝트가 테스트 오브젝트 맵에 없는 경우라도 오브젝트 계층 구조는 사용자가 상위-하위 계층을 순회하는 동안 이들 오브젝트를 표시합니다. 맵핑 가능한 계층을 관리하는 메소드에는 shouldBeMapped(), getMappableParent() 및 getMappableChildren()이 포함됩니다.
일부 경우, Java, HTML 및 .NET와 같은 기본 오브젝트 모델이 특성을 이해할 수 있도록 지원합니다. Functional Tester를 사용하면 프록시에서 추가 특성을 구현할 수 있습니다. 프록시에서 직접 특성을 구현하는 경우 오브젝트의 다른 특성과 혼동되지 않도록 특성 이름은 다른 패턴을 가져야 합니다. 인식을 위해 사용할 일반 특성 이름은 마침표(.)로 시작해야 합니다. 특정 관리 특성은 인식을 위해 사용할 수 없는 프레임워크에서 사용되며 이러한 특성 이름은 숫자 부호(#)로 시작합니다.
많은 경우, 기본 오브젝트에는 찾아서 호출할 수 있는 메소드가 있습니다. 일반적으로 프레임워크 및 도메인 구현에서 이러한 메소드를 직접 관리하지만 getMethod()는 대개 도메인의 기본 프록시에서 구현됩니다.
가능한 경우에는 항상 글래스(Glass)에서 마우스 조치를 재생하십시오. 메소드 이름에 "클릭" 또는 "끌어오기"가 포함되는 경우 마우스 이벤트에서 조치를 수행하게 하십시오. 조치를 구현하는 데 마우스 이벤트를 사용하지 않는 경우에는 "클릭" 또는 "끌어오기"와 같은 메소드 이름을 사용하지 마십시오. 키보드 이벤트에서 조치를 구현하지 않는 경우 키 또는 키보드를 참조하는 메소드 이름을 사용하지 마십시오. 메소드가 수행할 조치를 반영하고 재생 시에는 안정되게 하십시오. 경험적 접근은 하지 마십시오.
오브젝트에는 기타 오브젝트가 들어 있을 수 있으며 중첩된 오브젝트로 공개되지 않은 내부 구조가 있을 수 있습니다. 예를 들어, 목록에 항목이 들어 있지만 목록 오브젝트가 항목을 오브젝트로 공개하지 않을 수 있습니다. HWND 기반 오브젝트에서는 이러한 동작이 일반적입니다. 하위 항목을 처리하는 데 가장 많이 사용되는 메소드는 getSubitem()과 click(), drag() 및 doubleClick()과 같은 마우스 조치 메소드입니다. getSubitem() 메소드는 널(null) 또는 문자열을 리턴합니다.
하위 항목의 오브젝트를 완전한 오브젝트로 공개하지 않으려면 다음과 같은 전략을 사용하십시오.
하위 항목 프록시를 맵핑 불가능한 것으로 선언하십시오. 해당 위치의 오브젝트가 상위 항목과 통신하여 집계 오브젝트에 대해 조치를 레코딩하고 하위 항목 기반의 GUI 조치 재생을 지원할 책임이 해당 상위 프록시에 있습니다.
레코딩 시 하위 항목 프록시가 processMouseEvent() 호출을 상위 항목에 전달합니다. 상위 프록시가 집계 오브젝트에 대해 조치를 레코딩하고 하위 항목 기반의 GUI 조치 재생을 지원해야 합니다.
레코딩 시 하위 항목 프록시가 processMouseEvent() 호출을 처리하고 상위 오브젝트에서 메소드 호출을 생성합니다. 상위 프록시는 집계 오브젝트에 대해 조치를 레코딩할 책임은 없지만 하위 항목 기반의 GUI 조치 재생을 지원해야 합니다.
참조를 앵커로 사용한 후에 등록 해제하도록 태그가 지정된 새로운 유형의 오브젝트 참조를 사용하십시오. 그러면 다른 오브젝트의 하위 항목을 사용하여 오브젝트를 앵커링할 수 있습니다. 중첩된 오브젝트를 상위 오브젝트의 하위 오브젝트로 맵핑할 수 있습니다.
예외 및 오류 구현 시 다음 규칙을 따르십시오.
프록시에서 개인용 또는 내부 예외를 처리하지 마십시오. 사용자의 프록시에 맞는 API 문서를 사용할 수 없을 수도 있습니다. 표준 예외(되도록이면 RationalTestExceptions)를 사용하십시오.
Java에서 com.rational.test.ft 패키지 또는 .Net에서 Rational.Test.Ft 이름 공간의 예외를 재사용하십시오. Java 프록시가 com.rational.test.ftMethodNotFoundException 예외를 처리하고 스크립트가 VB에 작성된 경우, VB 스크립트가 Rational.Test.Ft.MethodNotFoundException 예외를 가져옵니다. com.rational.test.ft에서 이름이 com으로 시작하지 않는 예외를 처리하면 해당 예외는 WrappedException 예외로 정리됩니다.
정리할 수 있는 모든 RationalTestExceptions는 단일 문자열 매개변수를 갖는 생성자를 지원해야 합니다.
Java에서 구현되는 프록시에 클라이언트로 리턴할 수 있을 것으로 예상되는 새 예외를 추가하는 경우 .Net에서도 동일한 예외를 구현해야 합니다.
Java에서는 예외를 반드시 선언해야 하는데 일부 테스터의 경우 예외를 선언하는 것이 유용하지 않을 수도 있습니다. 거의 모든 GUI 메소드에서 예외가 많이 발생하므로 Java의 예외 대신 런타임 예외를 사용하십시오. 오류를 사용하지 마십시오. 오류를 사용하면 전체 재생 또는 레코더 세션이 중지됩니다.
오브젝트를 찾을 수 없는 경우 프레임워크에서 ObjectNotFoundException 예외를 처리합니다. 오브젝트가 있고 하위 항목이 지정되었으나 찾을 수 없는 경우 프록시에서 SubItemNotFoundException 예외를 처리해야 합니다. 프레임워크에서 SubItemNotFoundException을 발견하며 자동으로 하위 항목을 다시 찾습니다.
입력 좌표에서 영역 밖에 있는 오브젝트 또는 하위 항목을 클릭하는 경우 오브젝트나 하위 항목의 영역을 포함하도록 좌표를 변경하십시오. 변경이 발생할 때 로그에 경고를 생성하도록 메커니즘을 추가하십시오. 오브젝트 화면 레이아웃을 완전히 표시할 수 없기 때문에 프록시에서 좌표 기반의 클릭을 사용해야 할 수도 있습니다. 예를 들어, JTree에서는 PLUS_MINUS 구조를 알 수 없지만 적용되는 하위 항목에 비교하여 찾을 수 있습니다. 프록시에서 하위 항목의 영역을 확장하여 PLUS_MINUS를 포함시키는 것도 가능합니다. 하위 항목에 음의 좌표를 사용할 수 있습니다. 정상 동작에 위반되는 모든 사항을 문서화하십시오. 지정된 좌표-클릭을 사용하는 하위 항목이 오브젝트 밖을 클릭하지 않는지 확인하십시오.
잘못된 오브젝트를 클릭한 경우 com.rational.test.ft.CoordinateOnWrongObjectException 예외를 처리하십시오. 올바른 대상에 잘못된 오브젝트가 겹쳐질 수도 있습니다. 컨테이너의 하위 오브젝트를 클릭하지 않도록 좌표를 변경할 수 있습니다. 지정된 위치를 무시하고 클릭할 적합한 오브젝트의 다른 위치를 찾으십시오. 맵핑 가능한 하위 오브젝트가 있는 오브젝트의 좌표를 레코드하지 말고 잘못된 오브젝트를 클릭하는 것을 허용하지 마십시오.
잘못된 하위 항목을 클릭한 경우 com.rational.test.ft.CoordinateOnWrongSubitemException 예외를 처리하십시오. 이 예외는 하위 항목이 지정되지 않은 오브젝트와 연관된 클릭에는 적용되지 않습니다. 이러한 유형의 클릭은 오브젝트와 해당 오브젝트의 모든 하위 항목을 클릭하는 경우에만 적용됩니다. 이런 경우 잘못된 하위 항목이 올바른 대상에 겹쳐지며 이는 하위 항목일 가능성이 있습니다. 이 예외가 발생하지 않게 하려면 중첩된 하위 항목이 있는 하위 항목의 좌표를 레코딩하지 마십시오. 지정된 위치를 무시하고 클릭할 적합한 하위 항목의 다른 위치를 찾으십시오.