使用Capybara和Xpath时无法悬停并单击按钮

时间:2013-11-27 03:48:33

标签: xpath selenium-webdriver capybara

我正在尝试使用Capybara单击按钮。我尝试了所有我能想到的组合,但没有运气。试图点击“删除”链接。只有当您将鼠标悬停在表格中的行上时,才会显示删除链接。

这是HTML:

    <tbody>
    <tr class="even" id="informal_6">
     <td class="columnOrganizationNameColumnValue" id="informal_7">

       <div>
         <a id="showLink_0" title="Organization Details" class="viewLink">
           Institution / Automation
         </a>
       </div>

       <div class="gridMenuDescription">
          &nbsp;
       </div>

       <div class="gridMenu">
           <a id="gridMenuDirectLink_1" title="Edit Organization" class="gridMenuItem">
             edit
           </a>

           <a id="gridMenuDirectLink_2" class="gridMenuItem delete">
             delete
           </a>
       </div>
     </td>

      </tbody>

我想注意一下,“gridMenu”div,当你使用Firebug将鼠标悬停在它上面时,它转向:

       <div class="gridMenu hover gridMenuShow">

我试过的一些事情,但没有运气:

    find(:xpath, '//*[(@id = "gridMenuDirectLink_2")]').click

    find("#informal_6").find("#informal_7").find(".gridMenu.hover.gridMenuShow").find(".gridMenuItem.delete").click

连连呢?

3 个答案:

答案 0 :(得分:5)

经过大量尝试尝试不同的事情后,我能够使用此代码:

  find('#informal_6').hover.find('.gridMenu').hover.find('.gridMenuItem.delete').click

答案 1 :(得分:0)

尝试使用以下代码将鼠标悬停在该行上。

  
    

page.driver.browser.mouse.move_to(page.driver.browser.find_element(:ID =&gt; “中定位器”))

  

答案 2 :(得分:0)

我有一个日历界面,其中AJAX编辑&amp;只有将鼠标悬停在每个日历条目上时,才会显示删除链接。它很好而且紧凑,但我无法让Capybara点击那些动态显示的元素,并且在父元素上使用.hover似乎没有什么区别。所以我尝试了一种目前运作良好的蛮力方法:

# Use Jquery to force display a hidden element. Useful for getting at links
# that are dynamically displayed.
# Call it like: js_show(".entry.scheduled[data-id=\"#{@da3.id}\"] .actions")
def js_show(selector)
  page.execute_script(" $('#{selector}').show(); ")
end

def js_hide(selector)
  page.execute_script(" $('#{selector}').hide(); ")
end

现在,当我需要点击仅在悬停等上显示的元素时,我可以调用js_show(".whatever.container.selector")强制显示链接,然后page.find(...).click有效。