2017-10-26 4 views
0

나는 셀렌을 배우고 대상 문서와 같은 행에있는 체크 박스를 설정하려고 시도하고있다. 다음은 행의 모양입니다.Xpath 검색으로 개선 되었습니까?

  <span><input>Checkbox</input></span> - <span>_lblDocumentCategoryDescription</span> - <span>_lblDocumentdescription</span> 

각 행은 해당 행, 카테고리 및 설명에 대한 확인란으로 구성됩니다. 설명이 제공되며 행의 시작 부분에서 해당 확인란을 설정할 필요가 있습니다.

나는 작동하는 해결책이 있지만 내 방법이 매우 느리고 더 느린 것을 여러 번 호출 할 수 있으므로 더 나은 방법을 찾고 있습니다. 문제의 페이지에는 병합 및 인쇄 기능에 추가 될 수있는 315 개의 고정 문서가 있습니다. 보통 적어도 3 행을 추가하여 검색을 실행해야합니다.

현재 CSS에 대한 지식이 제한되어 있으므로 검색을 위해 xpath를 사용하고 있습니다. 사용하지 않는 한 DOM을 트래버스하는 것처럼 보이지 않습니다. 일부 자바 스크립트, 나는 피하려고 노력하고있다. 나는 JS를 실행하면 사용자를 정확하게 에뮬레이션하지 못하기 때문에 xpath가 해결책이라고 생각한다.

다른 사람들이 더 잘 찾았 으면하는 더 빠르고 더 나은 /보다 효율적인 솔루션이 있어야한다는 것을 알고 있습니까? 여기

내가 현재 사용하고 무엇을 :

메소드 호출 CPTools을 setStupidCheckbox ("전대 부록", true)를;

방법 : 여기

  public CPTools setStupidCheckbox(String documentToPrint, Boolean onIfTrue) { 
        this.log.trace("Starting: setStupidCheckbox; parameter: documentToPrint " + documentToPrint); 
        String xpathForCheckboxes = "/ancestor::tr//input"; 
        try { 
         String xpathForDocumentDescriptions = String.format("//span[contains(text(), '%s')]", documentToPrint); 
         tools.waitForElement(By.xpath(xpathForDocumentDescriptions), 2); 
         if (driver.findElement(By.xpath(xpathForDocumentDescriptions)).isDisplayed()) { 
          driver.findElementByXPath(xpathForDocumentDescriptions + xpathForCheckboxes).click(); 
         } 
        } catch (org.openqa.selenium.NoSuchElementException | ElementNotVisibleException e) { 
        } 
        this.log.trace("Ending: setStupidCheckbox"); 
        return this; 
       } 

테이블 행의 전체의 XPath 인 (이드의 동적 부분 _ctl316이다) 가능한 도움에 미리

  <tr class="DataGridCellData"> 
       <td class="DataGridCellDataCenterAligned"> 
        <span class="DataLabel"><input id="ctl01_PageBody_grdDocument_ctl316_chkSelect" name="ctl01$PageBody$grdDocument$ctl316$chkSelect" onclick="javascript:uiHelper.GridCellCheck(this, 'chkAllSelect');" type="checkbox"></span> 
       </td><td> 
        <span id="ctl01_PageBody_grdDocument_ctl316_lblDocumentCategoryDescription">Approval Form</span> 
       </td><td align="left"> 
        <span id="ctl01_PageBody_grdDocument_ctl316_lblDocumentdescription">Sublease Addendum</span> 
       </td><td align="center"> 
       </td> 
      </tr> 

감사합니다. XPath는 아래

+0

당신이 얻고 싶은 요소? – NarendraR

+0

"// 입력 [contains (@onclick, 'chkAllSelect')]"은 어떨까요? –

+0

내 질문에 애매한 점에 대해 사과드립니다. 확인란을 선택하려고하지만 그 중 315 개가 있습니다. 내가 아는 유일한 참고 자료는 문서 설명 범위 (Sublease Addendum)에있는 텍스트입니다. –

답변

0

봅니다 스팬 텍스트 (전대 부록)은 고유 한 경우 : //td[.= '전대 부록']

+0

감사합니다 Kuldeep, 내가 시도했는데 이것은 내 방법보다 더 빨리 검색을하지 않습니다 - 나는 단지 "Sublease Addendum"이라는 문자열을 찾고 있지 않습니다. 그 스팬에있을 텍스트를 찾고 있습니다 - "Sublease 부록은 한 예를 들어 내가 사용하고 있습니다 .315 다른 항목을 통해 xpath 검색 속도가 느린이며 그 도움을 찾고 있어요. 시도해 줘서 고마워! –