2016-08-13 3 views
0

요구 사항은 다음 표의 열 순서가 열 머리글 이름에서 올바른 순서로되어 있는지 확인하는 것입니다.셀 열의 테이블 열 순서 확인

따라서 필자는 필요한 순서대로 테이블 헤더 이름의 배열 목록 [String]을 허용하는 요구 사항을 처리하는 방법을 작성했습니다.

하지만 'isDisplayed()'메서드는 항상 'false'를 반환하므로 소프트 어서션을 통해 내 요구 사항을 수행하지 않습니다.

누군가 나에게 친절하게도 수정하고 수정하도록 추가 제안 할 수 있습니까? 테이블에 대한

HTLM 코드 :

<table id="examMarkEntryExamList" class="display table table-bordered table-striped dynamic-table display_header_class"> 
    <thead> 
     <tr> 
      <th class="text-center sortable sorted order1">Academic Year</th> 
      <th class="text-center sortable sorted order1">Curriculum</th> 
      <th class="text-center sortable sorted order1">Grade</th> 
      <th class="text-center sortable sorted order1">Semester/Term</th> 
      <th class="text-center sortable sorted order1"> 
       <a class="pagination-cuser-point">Exam Code</a> 
      </th> 
      <th class="text-center sortable sorted order1">Actions</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr class="odd"> 
      <td>2016-2016</td> 
      <td>LOCAL</td> 
      <td>GRADE11</td> 
      <td>2nd Term</td> 
      <td>G11SecondTerm</td> 
      <td> 
     </tr> 
    </tbody> 
</table> 

셀레늄 [자바] 방법은 열 순서

public void verifyColumnOrder(WebDriver driver, String tableId, ArrayList<String> columnHeaderList) { 

     SoftAssert softassert = new SoftAssert(); 
     String relativeXpath = "//table[contains(@id,'"+tableId+"')]/"; 
     for (String columnHeader : columnHeaderList) { 

      relativeXpath = relativeXpath + "/following-sibling::th[contains(.,'" + columnHeader + "')]"; 
      softassert.assertTrue(driver.findElement(By.xpath(relativeXpath)).isDisplayed()); 
    } 
    softassert.assertAll(); 
} 

답변

0

사용하고있는 XPath는이 잘못된을 확인합니다. th는 table 태그의 형제가 아닙니다. 그것은 내부 2 레벨입니다.

이 CSS 로케이터를 사용해보십시오. "table [id = 'examMarkEntryExamList'] th '. By.cssSelector 또는 xpath "// table [@ id = 'examMarkEntryExamList'] // th"를 사용하여 직접 사용할 수 있습니다.

웹 요소 목록을 가져 오는 데이 로케이터를 사용하십시오. 여기에서 th 태그의 텍스트 목록을 가져옵니다.

List<WebElement> thelem = driver.findElements(By.xpath....); 
List<String> thText = thelem.stream().map(e -> e.getText()).collect(toList()); 

그냥 assert -`softassert.assertTrue (thText.equals (columnheaders));

실제 구문을 확인하십시오.

1

다른 해결책은 바로 thead의 텍스트를 getText()으로 가져 오는 것입니다. 비교가 용이 한 모든 보이는 제목의 연결을 반환합니다 :

public void verifyColumnOrder(WebDriver driver, String tableId, ArrayList<String> columnHeaderList) { 

    String expectedHeaders = String.join(" ", columnHeaderList); 
    String visibleHeaders = driver.findElement(By.cssSelector("[id='" + tableId + "'] thead")).getText(); 

    Assert.assertEquals(visibleHeaders, expectedHeaders); 
} 
+0

findElement를 findElement로 변경하십시오. 그렇지 않으면 getText()를 컴파일 할 수없는 목록에서 호출하게됩니다. 그렇지 않으면 getText 앞에 '[0]'을 붙이십시오. – Grasshopper

+0

@Grasshoppe, 감사합니다. –