2017-11-21 24 views
0

sikuli를 사용하는 데 문제가 있습니다.sikuli를 사용하여 여러 번 사용되는 특정 드롭 다운 항목을 클릭하십시오.

첨부 된 툴바 이미지에서 다른 용도로 3 번 드롭 다운 메뉴가 있습니다. sikuli를 사용하여 두 번째 드롭 다운 메뉴를 클릭합니다.

아래 코드를 사용하고 있지만 문제는 코드를 실행하는 동안 첫 번째 드롭 다운을 클릭하는 것입니다.

내 코드는 다음과 같습니다

Screen screen = new Screen(); 

    // Create object of Pattern class and specify the images path 

    Pattern image = new Pattern(AppConstant.IMAGE_DIR+"toolbar.png"); 
    Pattern image2 = new Pattern(AppConstant.IMAGE_DIR+"import-button.png"); 
    Pattern image3 = new Pattern(AppConstant.IMAGE_DIR+"dropdown.png"); 
    //screen.wait(image.exact(), 10000); 
    screen.find(image); 
    screen.find(image2); 
    screen.find(image3); 

enter image description here

enter image description here

어떤 제안은 어떻게이 일을?

감사

모두의

답변

1

는 최상의 피벗 등 주변 소자를 사용하는 것이다. 귀하가 원하는 요소의 동일한 영역에 또 다른 고유 한 요소가 있음을 알고 있다면 해당 고유 요소를 먼저 찾은 다음 고유 요소 주위에서 실제로 필요한 요소를 검색 할 수 있습니다.

예를 들어, 필요한 경우 드롭 다운 메뉴 버튼 옆에 파란색 아래쪽 화살표가 있습니다.

다음
ImagePath.setBundlePath("C:\\someDir\\sikulipatterns"); //This is to avoid supplying directory for each pattern 
Screen screen = new Screen(); 

Pattern bigBlueArrowPattern = new Pattern("bigBlueArrow.png"); 
Pattern dropDownPattern = new Pattern("dropDownArrow.png"); 

Region bigBlueArrowPatternRegion = screen.find(bigBlueArrowPattern); 
bigBlueArrowPatternRegion.grow(50).find(dropDownPattern).highlight(1); 

, 50 그래서 기본적으로 파란색 화살표 주변 지역을 확장, 지역 주위에 추가 할 여백이 : 그래서 당신은 이런 식으로 뭔가를 할 수 있습니다. 정확한 요소가 실제로 배치되었음을 강조하기 위해 나는 highlight(1)을 포함 시켰지만, 그것을 제거하고 발견 된 요소로 무엇을 하든지해야합니다.

+0

나는 이것을 시도하고 당신에게 알려드립니다. –

+0

예, 작동하며 이것은 같은 유형의 여러 항목을 선택하는 데 가장 적합한 솔루션입니다. –

+0

당신, 내 말은 bigBlueArrowPattern 항목에서 왼쪽과 같이 50 픽셀은 좀 더 세부 사항에 대해 (50) 성장 추가 개 pls 수 있습니까? –

0

먼저 해당 요소의 접근성 ID가 필요합니다. 해당 요소에 AI (액세스 가능성 ID)가있는 경우 그런 다음 요소를 반복하고 원하는 색인에 액세스 할 수 있습니다.

Windows에서 AI를 얻으려면 Inspect (miscrosoft의 Ai 도구)를 사용할 수 있습니다. Mac에서는 Appium을 사용하여 AI를 얻을 수 있습니다.

개발자 소스 코드에 액세스 할 수 있으면 Api도 찾을 수 있습니다.

ELSE : 아래 코드를 사용할 수 있습니다. 희망이 당신을 도울 것입니다.

 Iterator <Match> matches = screen.findAll("dropdown.png"); // s is screen 
     Pattern pButton = new Pattern("dropdown.png"); 


     while (matches.hasNext()) { 

     Match m = matches.next(); 
     i++; 
     if(i==3) { 

      screen.click(m); // click on drop-down 
      Thread.sleep(1000); 
      break; 
     } 
    } 
+0

질문을 다시 읽으십시오. OP는 Appium이 아닌 Sikuli를 사용합니다. 접근성 ID는 여기서 도움이되지 않습니다. –

+0

그가 프로젝트에 도움이 될 수있는 것보다 더 많은 도구를 추가 할 수 있다면. –

0

당신은 붙박이 findall은과 getlastMatches 방법을 사용하고 당신이 원하는 하나를 클릭 할 수 있습니다. 여러 유사한 패턴 시나리오

icons = findAll(image3) mm = list(getLastMatches()) click(mm[2])

+0

좀 더 명확하게 할 수 있습니까? 나는 말한 것을 이해하지 못한다. –

+0

기본적으로 findAll 메서드를 사용하여 모든 드롭 다운을 배열 변수에 저장 한 다음 그에 따라 작업 할 수 있습니다. – anish

+0

Iterator it = screen.findAll (AppConstant.IMAGE_DIR + "dropdown.png"); \t int i = 0; \t while (it.hasNext()) { \t \ti ++; \t if (i == 2) { \t \t it.next(). click(); \t} \t에서 System.out.println ("*********************"+ I + "************* ** "); 이 같은 일을하고 \t} –