5

尝试在我尝试实现的集成测试上按下“添加”按钮时出现上述错误。我认为这是 javascript 的延迟,我尝试了以下方法,但都没有奏效:

Then /^I should click "([^"]*)"$/ do |selector|
  # if page.should have_selector(selector)
  # find(selector).click
  # end
  # page.execute_script("$(#{selector}).click()")
  find(selector).click
end

我尝试了以上所有方法,但这并没有解决问题。

4

5 回答 5

5

这不是一个很好的答案,但无论如何我都会给出它......

我只在使用 Chrome 进行测试时看到过这个问题。有两种解决方案对我有用:

  • 使用 Firefox 而不是 Chrome
  • 而不是find(selector).click,使用page.execute_script("$(#{selector}).click()")

但是由于您尝试了第二个选项并且它不起作用,请尝试改用 Firefox。对不起 :(

于 2012-09-14T18:33:02.140 回答
4

我发现调整浏览器窗口的大小可以解决类似的问题:

 Given(/^I open a new browser window$/) do
   Capybara.current_session.current_window.resize_to(1000, 1000)
 end
于 2017-01-25T16:19:07.953 回答
4

尝试在页面末尾单击“保存”按钮时,我在 Capybara 中遇到了同样的错误。使用 JS 滚动和显示元素被证明是一种有效的解决方法。

def scroll_to(element)
  script = <<-JS
  arguments[0].scrollIntoView(true);
  JS
  Capybara.current_session.driver.browser.execute_script(script, element.native)
  element # return the element
end

scroll_to(
  find(:xpath, '//button[text()=\'Save\']')
).click

更新


对我来说,结果是安装的 Chrome 和 Chromedriver 的版本不匹配,毕竟不需要更改代码。

Chrome 61+ 包括对滚动行为的修改。对 Chromedriver 页面的快速检查显示我必须升级我的 Chromedriver(从 2.29 到 2.32)以使驱动程序与这些更改兼容。这是 Chromedriver 2.30(支持 Chrome v59-61)发行说明的一部分:

  • 修复了由于 Chrome 61+ 中页面滚动更改导致 Chromedriver 无法点击的错误。
于 2017-09-27T22:30:38.277 回答
0

我有一个粘性标题,它阻止 Selenium 将点击发送到 Chrome 和 Firefox 上的右侧单选按钮(尽管 Poltergeist 工作正常)。这是删除所有固定元素(如粘性标题)的技巧,它对我有用:

def kill_sticky_headers
  # https://alisdair.mcdiarmid.org/kill-sticky-headers/
  script = <<-EOS
  (function () {
    var i, elements = document.querySelectorAll('body *');

    for (i = 0; i < elements.length; i++) {
      if (getComputedStyle(elements[i]).position === 'fixed') {
        elements[i].parentNode.removeChild(elements[i]);
      }
    }
  })();
  EOS
  page.execute_script script
end
于 2016-05-01T21:53:40.950 回答
-1

我遇到了类似的问题,我必须一个接一个地检查两个复选框。但是我遇到了同样的上述错误,因此我在检查复选框的步骤之间添加了一个等待。它工作得很好。

以下是步骤:-

  When I visit /administrator/user_profiles
  And I press xpath link "//*[@id='1']"
  Then I should see "Please wait for a moment..."
  When I wait for 5 seconds
  And I press xpath link "//*[@id='2']"
  Then I should see "Please wait for a moment..."
  When I visit /administrator/user_profiles_updates
于 2012-12-26T09:12:57.903 回答