【问题标题】:Capybara with Selenium: Can't click on hidden elementCapybara with Selenium:无法点击隐藏元素
【发布时间】:2016-07-15 23:47:43
【问题描述】:

在我的视图中,只有当它包含 div 时,可点击图标才可见(使用 Knockout JS,SCSS)。像这样的:

HTML

<div id="button_div">
   <i id="icon" data-bind="click: dosomething"></i>
</div>

SCSS

i {
  display: none;
}

#button_div:hover {
   i {
      display: block;
   }
}

页面上一切正常,但我似乎无法弄清楚如何单击 Capybara 中的元素。我尝试将 :visible 符号添加到方法中,但没有运气:

find('#icon', visible: false).click

这给了我一个“Selenium::WebDriver::Error::ElementNotVisibleError”错误。

使用:

Capybara.ignore_hidden_elements = false

给了我完全相同的错误

我也尝试过使用 Selenium Action,例如:

button_div_element = find('#button_div').native
button_element = find('#button', visible: false).native
page.driver.browser.action.move_to(button_div_element).click(button_element).perform

虽然这不会引发错误,但它也不会单击按钮。

有人知道我做错了什么吗?

【问题讨论】:

    标签: ruby selenium knockout.js capybara


    【解决方案1】:

    Capybara 旨在模拟用户,因此您无法点击不可见元素,因为用户无法点击。但是,您应该能够复制用户操作以使元素可见,然后单击它

    find('#button_div').hover
    find('#icon').click
    

    如果这没有引发错误,但似乎也没有点击按钮,请尝试在两个操作之间放置一个短暂的睡眠,因为您可能有一个动画外观,这可能会导致点击错过项目

    【讨论】:

    • 这似乎应该工作,但它没有(至少对我来说)。尝试单击图标时出现“找不到元素”错误。
    • 嗯,这种确切的行为已在 capybara 中进行了测试 - github.com/jnicklas/capybara/blob/… - 不确定您的应用有什么不同
    • @nmg49 对图标应用了哪些其他 CSS
    • 我遇到了同样的问题。我可以使用 find('css_selector') 找到元素,当使用路径时,我在浏览器中找到元素,然后它会导致正确的元素。但是当我尝试通过 find('css_selector').click 单击它时,它不会单击它。快速完成这一切也不是问题,因为我正在使用 byebug 调试它并完成所有这些工作,因此页面已完全加载。知道在这种情况下可能是什么问题吗?
    • @waqas 如果您遇到问题,请创建一个包含有关该问题的足够详细信息的新问题(HTML、您尝试过的代码、“不点击”的确切含义的详细信息(错误,否响应,...)等)有人回答。不要在之前问题的答案中提出新问题。
    【解决方案2】:

    尝试使用.execute_script() 如下:-

    button_div_element = find('#button_div').native
    button_element = find('#button', visible: false).native
    page.driver.browser.action.move_to(button_div_element).perform
    page.driver.browser.execute_script("arguments[0].click()", button_element)
    

    希望它会起作用...:)

    【讨论】:

      【解决方案3】:

      经过一番艰苦的尝试和错误,我设法找到了一个可行的解决方案

      button_div = find("#button_div_id").native
      icon = find("#icon_id").native
      page.driver.browser.action.move_to(button_div, :right_by => -50).click.perform
      icon.click
      

      不知道为什么我必须手动告诉 Capybara 向左移动 50 像素,但这似乎成功了。

      另外,我在设置代码中添加了以下行:

      page.driver.browser.manage.window.maximize
      

      这可确保在运行测试之前最大化窗口。我不能 100% 确定,但这也可能与修复有关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-15
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多