Descript라이브 프로그래밍 QTP/UFT동적 및 정적

⚡ 스마트 요약

Descript라이브 프로그래밍은 다음을 가능하게 합니다 QTP or UFT 하나의 문장이 속성 값 쌍 또는 다음과 같은 형태로 객체 설명 자체를 전달합니다. Descript이온 객체이므로 객체가 객체 저장소에 저장된 적이 없더라도 단계가 실행됩니다.

  • 🔘 저장소를 우회합니다: 설명은 문장 내부에 포함되어 있으므로 실행 시 객체 이름을 조회할 필요가 없습니다.
  • ☑️ 정적 형태: 테스트 객체 호출 내에서 속성 값 쌍은 쉼표로 구분하여 "property:=value" 형식으로 인라인으로 작성됩니다.
  • ✅ 동적 형태: Description.Create는 여러 문에서 공유할 수 있는 재사용 가능한 속성 컬렉션을 생성합니다.
  • 🧪 예측 불가능한 물체를 위해 설계되었습니다: 자동 숨김 패널, 변경되는 계층 구조, 중첩된 내부 객체 및 크기를 알 수 없는 결과 집합.
  • 🛠️ ChildObjects는 이것과 쌍을 이룹니다: A Descript필터로 사용되는 ion 객체는 부모의 자식 객체 중 일치하는 객체만 반환합니다.
  • 📌 기억해야 할 두 가지 규칙: 모든 속성 값은 정규 표현식으로 처리되며, 부모를 설명한 후에는 자식도 반드시 설명해야 합니다.

정적 및 동적 서술형 프로그래밍 문 QTP   UFT 한

Descript프로그래밍 중이신가요?

Descript라이브 프로그래밍 이 함수는 AUT(테스트 대상 시스템) 내의 객체에 대한 연산을 실행하는 데 사용되며, 해당 객체의 정의는 저장되어 있지 않습니다. 개체 저장소이 메커니즘을 사용하면 객체 저장소의 식별 과정을 건너뛰고 객체를 직접 제공할 수 있습니다. Descript진술 자체에 이온이 있습니다.

객체 이름은 스크립트의 객체와 객체 저장소의 해당 설명을 연결하는 데 사용됩니다. 즉, 스크립트와 객체 저장소에서 객체 이름을 변경하더라도 스크립트는 계속 실행됩니다. 이 개념에 대한 자세한 내용은 다음 영상을 참조하세요.

여기에서 확인하세요 비디오에 접근할 수 없는 경우

비디오 하이라이트

  • 객체 삭제 Descript개체 저장소에서 에이전트 이름 WinEdit 상자의 항목을 선택합니다. 테스트를 다시 실행하면 개체를 인식할 수 없으므로 실패합니다. 스크립트가 실패하는 이유를 살펴보겠습니다.
  • 실행 시간 동안, UFT WinEdit 상자에서 수행되는 작업과 개체를 식별합니다. Descript객체 저장소의 ion은 에이전트 이름으로 저장됩니다. 이 이름은 다음과 같은 용도로 사용됩니다. trac객체 저장소에서 해당 객체를 k라고 합니다. 부모 객체는 자식 객체와 같은 이름을 가질 수 없습니다. QTP 먼저 리포지토리에서 객체를 고유하게 매핑합니다. 그런 다음 객체 리포지토리에 저장된 설명을 사용하여 이름을 설명으로 바꾸고, 결과로 생성된 문장을 사용하여 테스트 대상 애플리케이션에서 해당 객체를 식별합니다.
  • 저희의 경우 해당 객체 설명을 완전히 삭제했기 때문에 스크립트가 실패합니다.
  • 하지만 만약 대신에 QTP 객체 설명을 대체하는 대신, 테스터인 당신이 스크립트에서 객체 설명을 직접 지정하는 건가요? 이건 그저 "Descript라이브 프로그래밍”

아래 두 양식은 바로 그 책임의 변화를 구현하는 것이며, 각 양식은 서로 다른 유형의 시나리오에 적합합니다.

유형 Descript라이브 프로그래밍

당신이 사용할 수 Descript두 가지 방법으로 프로그래밍

  1. 정적인
  2. 동적

정적인 Descript라이브 프로그래밍

정적 메서드에서 객체 식별을 위해 다음 형식으로 객체의 속성을 지정합니다.

property:=values,

이 형식을 속성 값 쌍이라고 하며 따옴표로 묶습니다. 전체 내용을 작성하면 정적 문은 다음과 같습니다.

TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method

객체 식별에 여러 설명이 사용되는 경우 쉼표를 사용하여 지정할 수 있습니다.

따라서 우리의 경우 에이전트 이름에 대한 설명은 다음과 같습니다.

"nativeclass:=Edit", "attached text:=Agent Name:"

정적 설명은 명령이 실행되는 지점에서 읽히므로 일회성 단계나 다시 기록할 필요가 없는 스크립트의 빠른 수정에 적합합니다.

동적 Descript라이브 프로그래밍

동일한 작업을 수행하는 두 번째 방법은 Dynamic을 사용하는 것입니다. Descript라이브 프로그래밍

스크립트가 설명적 프로그래밍 개체 후보를 여러 번 사용하는 경우 각 명령문에 대한 모든 속성 값 쌍을 지정하는 것은 매우 번거로운 작업입니다.

이러한 경우, 다음을 활용할 수 있습니다. Descript이온 클래스는 다음에서 제공합니다. QTP

설명 객체를 생성하는 구문은 다음과 같습니다.

Set MyDescription = Description.Create()
MyDescription("property").Value = "property-value"

이것이 동적 방법입니다.

위에서 사용한 에이전트 이름 속성으로 해당 객체를 채우면 완전하고 재사용 가능한 설명이 생성됩니다.

Dim oDesc
Set oDesc = Description.Create()
oDesc("nativeclass").Value = "Edit"
oDesc("attached text").Value = "Agent Name:"

변수 설명 이제 해당 객체가 필요한 모든 명령에 전달할 수 있으므로 한 번의 수정으로 해당 객체를 사용하는 모든 단계가 업데이트됩니다.

정적 vs 동적 Descript실시간 프로그래밍: 각 기법은 언제 사용해야 할까요?

두 형식 모두 동일한 런타임 설명을 생성하므로 선택은 기능보다는 유지 관리와 관련이 있습니다.

기준 정적(인라인) 동적(Descript이온 객체)
설명이 작성되는 방식 테스트 객체 호출 내부에 입력된 속성 값 쌍 생성된 객체에 추가된 속성 Descript이온.생성()
재사용 객체가 필요한 모든 문장에서 반복됩니다. 하나의 변수에 저장되어 필요한 곳 ​​어디든 전달됩니다.
가독성 짧은 문장은 읽기 쉽지만, 긴 문장은 다루기 어려워진다. 추가 설정 라인이 있지만, 문장 자체는 간결합니다.
런타임 변경 변수들을 연결하여 생성하지 않는 한 값은 고정되어 있습니다. 속성 값은 사용 전에 다시 할당할 수 있습니다.
ChildObjects와 함께 작동합니다. 아니요, filter 인수는 반드시 a여야 합니다. Descript이온 객체 네, 이것이 필수 양식입니다.
가장 적합 저장소에 없는 객체에 대해 한두 단계 작업을 수행합니다. 반복적으로 사용되는 객체 또는 실행 시점에 검색되는 컬렉션

왜 사용 하는가? Descript프로그래밍 중이신가요?

아래 대본은 물체의 개수를 미리 알 수 없는 실제 시나리오에 대한 비디오 설명과 함께 제공됩니다.

비디오 대본

  • 가장 중요한 질문은 객체 식별 프로세스가 이미 처리되고 있는데 왜 DP를 사용해야 하는가 하는 것입니다. QTP
  • 구인 포털 테스트를 담당하게 되었다고 가정해 보겠습니다. 포털에 검색어를 입력하고, 테스트에서는 모든 채용 공고를 선택한 후 "지원하기" 버튼을 클릭해야 합니다.
  • 하지만 표시되는 채용 공고 수는 검색어와 스크립트 실행 시점에 이용 가능한 채용 공고 수에 따라 달라지며, 표시될 채용 공고 수를 사전에 예측할 방법은 없습니다.
  • 이러한 경우, 설명적 프로그래밍을 사용할 수 있습니다. 체크박스의 개수와 이름은 몰라도 해당 객체의 클래스가 "WebCheck"라는 것은 알고 있기 때문입니다.Box"
  • 당신은을 사용할 수 있습니다 ChildObjects 메서드 특정 부모에 속한 객체를 반환하려면
  • 다음과 같은 코드 줄 -
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    이 페이지의 모든 하위 객체를 반환합니다.

  • 하지만 우리는 WebCheck만을 원합니다Box 객체를 생성하려면 필터 객체를 만들고 해당 속성을 웹 체크박스 클래스로 설정한 다음, 이 필터를 ChildObjects 메서드의 인수로 전달하면 됩니다.
  • 이 경우에는 체크박스만 반환됩니다.
  • 다음으로, 다음과 같은 코드를 작성하면 0부터 시작하여 전체 체크박스 컬렉션에 접근하고 모든 체크박스를 켜짐으로 설정할 수 있습니다.
  • 다음으로 적용 버튼을 클릭하여 테스트를 완료할 수 있습니다.
  • VOUS pouvez의 aussi 사용 Descript자동 숨기기 패널, 계층 구조가 변경되는 객체, 중첩된 내부 객체, 하위 메뉴 등 기록하기 어려운 객체를 실행하기 위한 프로그래밍이 필요합니다.
  • 설명 프로그래밍을 사용하여 고급 문자열 조작을 수행할 수도 있습니다.
  • 인덱스 속성과 함께 설명적 프로그래밍을 사용하면 식별하기 어려운 객체를 찾는 데 매우 유용할 수 있습니다.
  • 객체 계층 구조에서 객체에 대해 프로그래밍 방식으로 설명하는 경우, 그 후속 자식 객체에 대해서도 설명적인 프로그래밍 방식을 사용해야 합니다.
  • 예를 들어, Page 객체에 설명적 프로그래밍이 사용되었지만 그 뒤를 잇는 자식 WinEdit 객체가 객체 저장소에서 온 경우, 해당 설명은 잘못되었습니다.
  • 반대로, Page 객체와 WinEdit 객체 모두에 대해 설명적 프로그래밍을 사용하는 경우에는 해당 진술이 옳습니다.

글로 옮겨 적으면, 녹취록에 설명된 필터와 루프는 다음과 같습니다.

Dim oFilter, allCheckBoxes, i
Set oFilter = Description.Create()
oFilter("micclass").Value = "WebCheckBox"
Set allCheckBoxes = Browser("Jobs").Page("QTP").ChildObjects(oFilter)
For i = 0 To allCheckBoxes.Count - 1
    allCheckBoxes(i).Set "ON"
Next

컬렉션은 0부터 시작하기 때문에 루프가 멈춥니다. 개수 – 1필터는 해당 코드가 실행될 때 평가되므로 검색 결과가 세 개이든 서른 개이든 동일한 코드가 작동합니다.

정규 표현식, 서수 식별자 및 일반적인 함정

Descript라이브 프로그래밍은 대부분의 사람들이 처음에는 눈에 띄는 이유 없이 명령문이 실패할 때 놀라는 두 가지 방식으로 작동합니다.

1) 모든 속성 값은 정규 표현식으로 처리됩니다. 캡션은 다음과 같습니다. 총액(USD) 따라서 괄호가 정규 표현식 구문이기 때문에 일치하지 않습니다. 백슬래시로 이스케이프하거나 해당 속성에 대해 정규 표현식 평가를 비활성화하십시오. Descript이온 객체:

Set oDesc = Description.Create()
oDesc("name").Value = "Total (USD)"
oDesc("name").RegularExpression = False

2) 서수 식별자를 사용하여 동점을 해결합니다. 설명이 여전히 둘 이상의 객체와 일치하는 경우, 추가하세요. 색인, 위치 or 생성 시간 추가 속성으로 사용됩니다. 인덱스 카운트는 0부터 시작합니다.

WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99"
WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"

애플리케이션 디버깅을 시작하기 전에 확인해야 할 세 가지 추가적인 함정이 있습니다.

  • 마이크클래스라벨이 아니라 클래스 이름 Object Spy에 표시됩니다. 표시 이름은 설명에서 유효한 속성이 아닙니다.
  • 속성 이름은 대소문자를 구분하지 않지만, 공백을 포함하여 기술에서 보고하는 철자와 정확히 일치해야 합니다. 첨부된 텍스트 HTML 태그.
  • Descript라이브 프로그래밍은 저장소를 우회하므로 객체 인식을 향상시키지 않습니다. 올바른 추가 기능이 로드되지 않으면 어떤 설명으로도 객체를 식별할 수 없습니다.

자주 묻는 질문

포인트 적립 개체 스파이 컨트롤에서 해당 식별 속성을 읽거나 런타임에 GetROProperty를 호출하십시오. 나열된 이름을 정확히 복사하십시오. Object Spy는 클래스 이름 레이블 아래에 micclass를 표시합니다.

일반적으로는 그렇지 않습니다. 저장소 조회는 저장된 설명을 한 번만 확인하는 반면, 설명문은 해당 줄이 실행될 때마다 평가됩니다. 설명적 프로그래밍의 이점은 예측 불가능한 객체에 대한 유연성이지, 순수한 속도 향상이 아닙니다.

빌드 Descript재사용 가능한 함수 안에 ion 객체를 넣고 그 함수를 그대로 유지하세요. Vbscript 테스트와 연관된 함수 라이브러리입니다. 라이브러리를 로드하는 모든 작업은 해당 라이브러리를 호출할 수 있으므로, 한 번의 수정으로 모든 호출자가 업데이트됩니다.

AI 기반 식별은 고정된 속성 대신 시각적 외관과 주변 라벨 텍스트를 기반으로 컨트롤을 일치시키므로 수기로 작성된 설명이 일부 제거됩니다. Descript실행 중에 객체를 계수하거나 필터링하는 경우 이온이 여전히 필요합니다.

Copilot은 루프를 구성할 수 있습니다. Description.Create는 설명을 기반으로 호출 및 보고를 수행하지만 애플리케이션을 직접 볼 수는 없습니다. ion.Create가 제안하는 모든 속성 이름과 값은 해당 구문이 신뢰할 수 있게 되기 전에 실제 컨트롤과 비교하여 확인해야 합니다.

드물게. A 공유 객체 저장소 설명을 편집 가능한 한 곳에 보관하고 스크립트를 읽기 쉽게 유지합니다. 대부분의 팀은 안정적인 화면을 저장소에 보관하고 객체가 동적으로 변경될 때만 설명을 참조합니다.

속성을 하나로 줄인 다음 나머지 속성을 하나씩 다시 추가합니다. ChildObjects 필터를 사용하여 객체 수를 확인하면 설명이 아무것도 일치하지 않는지 또는 여러 객체와 모호하게 일치하는지 알 수 있습니다.

예. 표준 기술을 포함하여 추가 기능이 로드된 모든 기술에서 작동합니다. Windows웹, .NET, Java 그리고 터미널 에뮬레이터 객체도 포함됩니다. 각 추가 기능이 자체 식별 속성을 보고하므로 속성 이름만 다릅니다.

이 게시물을 요약하면 다음과 같습니다.