2012-03-13 3 views
0

RSpec 및 Capybara로 작업하고 있는데 textContent 또는 : text 특성을 기반으로 특정 행을 선택하려고 할 때 문제가 발생했지만 테스트에 입력 된 문자열과 관계없이 첫 번째 행 항상 선택됩니다. 다음과 같이텍스트 문자열을 기반으로 특정 테이블 행을 찾습니다

HTML 코드는 다음과 같습니다

it "should allow asset to be deleted by Admins" do 
visit 'http://localhost:3000/' 
click_link 'Admin' 
within(:xpath, '//*[@class="LearningAssetList admin"]') do 
    #row = find('tr>td.assetName>a', :textContent => "Learning Asset Test Upload") 
    row = find('tr>td.assetName>a', :textContent => "Learning Asset Test Upload".to_s) 
    within(row) do 
    find(:xpath, '//*[@class="popupMenu"]').click  
    end 
    sleep 5 
    find(:xpath, '//*[@class="delete"]').click 

    popup = page.driver.browser.switch_to.alert 
    popup.text.should eq('Are you sure you would like to delete this asset?') 
    popup.accept   
    assetList = find(:xpath, '//*[@class="LearningAssetList admin"]') 
    assetList.should have_content('Learning Asset Test Upload') 
    sleep 5  
end 

나는이 항목 위의 테이블의 다른 행이 어디 ASSETNAME을 다음과 같이

<table class="LearningAssetList admin" data-id="1"> 
    <tbody> 
    <tr class="CategoryHeader"> 
     <td class="expandCell" colspan="9"> 
     <span>Admin Pro/Scheduling</span> 
     </td> 
    </tr> 
    <tr class="headerRow ui-droppable"> 
     <td class="blank"></td> 
     <td></td> 
     <td>Name</td> 
     <td>Description</td> 
     <td class="center">Length</td> 
     <td class="center">User Rating</td> 
     <td style="width:20px;padding:0px;"></td> 
     <td style="width:20px;padding:0px;"></td> 
    </tr> 
    <tr class="assetRow ui-draggable ui-droppable" data-id="49"> 
     <td class="blank">&nbsp;</td> 
     <td class="assetPlay icon"> 
     <td class="assetName"> 
     <a onclick="openModal('http://www.youtube.com/v/C0DPdy98e4c','Learning Asset  
Test Upload')" href="#">Learning Asset Test Upload</a> 
     </td> 
     <td class="assetDescription"> 
     <td class="assetDuration"> 
     <td class="assetRating icon"> 
     <td class="assetFunctions center"> 
     <td class="assetDrag center"> 
     <td class="blank">&nbsp;</td> 
    </tr> 
    </tbody> 
</table> 

내 RSpec에 코드가 단순히 "Test"이고 text, textContext를 사용하는지 실제로 문자열을 변경하는지에 관계없이이 행은 항상 선택되며 더 많은 옵션 버튼이이 행에서 눌러집니다 잘못된 자산을 삭제할 수 있습니다.

누구나 RSpec 코드 또는 행을 선택하는 로직에 문제가있는 것을 볼 수 있습니까? assetName TD의 텍스트가 발견 될 행과 일치해야한다고 생각 했었지만 발생하지 않는 것 같습니다.

+0

테스트를 개선하고 오류를 좁히기 위해 할 수있는 많은 일이 있습니다. XPath 구문은 아무런 이점이 없으며 오류가 발생할 가능성이 있습니다. 'within (". LearningAssetList.admin")'과 같은 것을 사용하십시오. ': textContent'는 Capybara 문서 AFAIK의 알려진 속성이 아닙니다. ': text' 옵션은 부분 일치를 수행 중일 수 있습니다. 행의 이름을 완전히 바꿔보십시오. –

+0

안녕하세요 앤드류, 팁 주셔서 감사합니다. – Jay

답변

0

귀하의 HTML은 완전히 잘못되었습니다. 서로 <tr> 개의 복수를 중첩 할 수 없으며 태그를 닫지 않았습니다.

+0

안녕하세요 앤드류 제대로 확장되지 않았습니다. – Jay

관련 문제