Найдите конкретную строку таблицы на основе текстовой строки - PullRequest
0 голосов
/ 13 марта 2012

Я работаю с RSpec и Capybara и столкнулся с проблемой при попытке выбрать конкретную строку на основе: textContent или: text атрибутов, но независимо от строки, введенной в тесте, всегда выбирается первая строка.

HTML-код выглядит следующим образом:

<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 выглядит следующим образом:

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 - просто «Test», и независимо от того, использую ли я текст, textContext или действительно меняю строку, эта строка всегда выбирается, и в этом случае нажимается кнопка дополнительных параметров. строка, которая впоследствии заканчивается удалением неправильного актива.

Может ли кто-нибудь увидеть какие-либо проблемы с кодом RSpec или логикой выбора строки, я думал, что текст в assetName td должен соответствовать строке, которую нужно найти, но, похоже, этого не происходит.

1 Ответ

0 голосов
/ 13 марта 2012

Ваш HTML-код полностью недействителен.Вы не можете вкладывать несколько <tr> внутри друг друга, и вы не закрыли ни один из тегов.

...