Capybara with Selenium:不能点击隐藏的元素

时间:2016-07-08 12:39:00

标签: ruby selenium knockout.js capybara

在我看来,我的情况是,只有当包含div的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

这给了我一个&#34; Selenium :: WebDriver :: Error :: ElementNotVisibleError&#34;错误。

使用:

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

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

有没有人知道我可能做错了什么?

3 个答案:

答案 0 :(得分:1)

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

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

如果它没有引发错误但也没有显示单击按钮尝试在两个操作之间进行短暂睡眠,因为您可能有动画外观可能导致点击错过项目

答案 1 :(得分:0)

尝试使用.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)

希望它能奏效...... :)

答案 2 :(得分:0)

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

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向左走50px,但这似乎已经成功了。

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

page.driver.browser.manage.window.maximize

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