2009-06-03 3 views
2

동적 인 객체 인식 (기술적 프로그래밍)을 사용하여 특정 텍스트 뒤에 나타나는 "삭제"레이블이 붙은 첫 번째 버튼을 찾습니다 (예 : 텍스트 뒤에 나타나는 첫 번째 삭제 버튼). "Item XYZ-123"). 텍스트와 버튼이 모두 웹 테이블의 단일 행에 있으면 kludgy 방법이 있지만 더 우아하고 신뢰할 수있는 솔루션 (테이블에 의존하지 않는 것이 좋겠다)을 기대하고있었습니다.Quicktest Pro - 텍스트를 일치시킨 후 첫 번째 버튼을 찾습니다.

.Object 속성은 .Object 속성이 Firefox 내에서가 아니라 IE 내에서 테스트 할 때 DOM 객체 만 반환한다고 주장하므로 .Object 속성을 사용하지 않는 것이 좋습니다.

감사합니다.

+1

WebElement ("html tag : = TR ..."). WebButton ("value : = Delete")? 나는 이것이 실제로 일을하는 좋은 논리적 인 방법이라고 생각한다. 부끄럽지는 않지만 파이어 폭스에서 작동하지 않는 것 같다. 그렇게하지 않으면 아래의 모티 솔루션이 합리적이라고 생각합니다. .Object를 사용하지 않는 경우 : FF로 비슷한 기능을 구현하기 위해 여러 가지 해결 방법을 사용할 수 있지만, 필자가 필사적으로 중요하게 생각하지 않는 한, FF 스크립팅의 모든 불일치를 해결하는 것보다 IE 용 스크립트를 작성하는 것이 더 가치가 있음을 알게되었습니다. QTP에서. – Xiaofu

답변

1

sourceIndex 속성을 사용하는 솔루션은 다음과 같습니다. sourceIndex은 IE 전용 속성이지만 QTP는 Firefox에서이를 시뮬레이트하므로 동일한 스크립트가 두 브라우저 모두에서 작동합니다. source_index이 청구서에 맞지 않는 경우 좌표 기반 속성 (예 : abs_xabs_y)을 사용할 수 있습니다.

독자들에게 연습 문제로 남겨 일반적인 기능에 그것을 만들기, 답변을 부탁으로 질문을 다음 코드; O)이 솔루션에 대해 주목해야 할

''#1. Create description for locator text 
Set textD = Description.Create() 
textD("micclass").Value = "WebElement" 
textD("innertext").Value = ".*Item XYZ-123.*" 

''#2. Find locator sourceIndex 
set texts = Browser("B").Page("P").ChildObjects(textD) 
Set text = texts(texts.Count-1) ' Take last text ' 
textIdx = text.GetROProperty("source_index") ' works for FF too ' 

''#3. Create description for button 
Set buttonD = Description.Create() 
buttonD("micclass").Value = "WebButton" 
buttonD("value").Value = "Delete" 
Set btns = Browser("B").Page("P").ChildObjects(buttonD) 

''#4. Find first button after locator text 
For i = 0 To btns.Count 
    If btns(i).GetROProperty("source_index") > textIdx Then 
     btns(i).Click ' Or whatever you want to do with it ' 
     Exit For 
    End If 
Next 

것들 :

  • 텍스트를 포함하는 요소에 대해 아무 것도 가정하지 않습니다. 요소의 전체 텍스트라는 것을 알고 있다면 더 나은 성능을 위해 "html 태그"를 추가하거나 .*을 제거 할 수 있습니다. 우리가 설명을 맞는 마지막 요소를 가지고 왜
    • 는 첫 번째 요소는 우리가 있기 때문에 기본적으로 "micclass"= "WebElement"를 지정해야하는 텍스트의 설명에서 BODY
  • 될 것입니다 ChildObject은 흥미롭지 않다고 가정하고 WebElement을 필터링합니다.
+0

감사! 이것은 완벽 해. –

1

쉬운 방법이 없다고 가정하면 HTML 구문 분석을 시도해 볼 수 있습니다. HTML에서 검색 텍스트를 찾은 다음 그 지점부터 HTML을 검색하여 "삭제"버튼을 찾습니다. 설명적인 프로그래밍에 사용할 수있는 HTML에서 ID 또는 다른 식별 속성을 가져올 수 있어야합니다.

자세한 내용을 보려면 샘플 HTML 및 QTP 코드가 있습니까? 아마도 더 쉬운 방법이있을 것입니다.

0

먼저 질문을 다시 말하게하십시오.

행 번호를 알 수 없지만 행을 찾기 위해 고유 한 키 값이있는 경우 WebTable에 포함 된 개체에 대한 참조를 검색하는 방법은 무엇입니까?

이는 버튼, 체크 박스, 콤보 박스 및 테이블의 다른 객체에 적용됩니다.

구현.

1) 행 찾기

intRow = objWebTable.GetRowWithCellText (sKeyValueText "항목") 당신은 이름이나 번호

2) Retreive 자식 객체에 의해 열을 지정할 수 있습니다

, "WebButton"설정 objButton = objWebTable.ChildItem (intRow, INTCOL, 0) 당신이 할 수있는 숫자로만 열을 지정하십시오. 동일한 셀에 둘 이상의 단추가있는 경우 마지막 매개 변수가 적용됩니다.

블로그 (http://automationbeyond.wordpress.com/)의 다른 기술적 인 예를 확인하십시오.

+0

반드시 테이블에 있어야하는 것은 아니지만 일반적인 기대이기는하지만. 또한 올바른 표를 찾는 것 역시 다양한 표를 보여주는 동적 페이지에서 문제가 될 수 있습니다. 내가 일반화 된 솔루션을 찾고 있는데, 테이블에있는 객체를 먼저 찾으면 이해할 수 있지만, 어떤 경우에는 테이블 밖을보고있을 가능성을 허용해야한다. –

+0

테이블에 html id 속성이 있는지 확인한다. (페이지 당 가치가 독창적 인) 정의. 이 경우 테이블을 식별하는 데 문제가 없습니다. 전반적으로, 당신이 찾고있는 텍스트/버튼의 컨텍스트가 중요하다는 점을 감안할 때 신뢰할 수있는 일반화 된 솔루션을 사용하면 올바른 테이블을 식별하지 않아도된다는 우려가 있습니다. 스크립트가 잘못된 테이블에서 올바른 텍스트를 찾아 통과로보고하면 가치가 있습니다. –