元素在点(617,690.5)处不可点击。其他元素将收到点击:...(Selenium :: WebDriver :: Error :: UnknownError)

时间:2012-09-13 15:40:46

标签: ruby selenium cucumber capybara

我在尝试按下集成测试时按“添加”按钮时出现上述错误。我认为这是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

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

5 个答案:

答案 0 :(得分:5)

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

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

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

但是,既然您已经尝试了第二个选项并且它不起作用,请尝试使用Firefox。对不起:(

答案 1 :(得分:3)

我发现调整浏览器窗口的大小会让类似问题消失:

 Given(/^I open a new browser window$/) do
   Capybara.current_session.current_window.resize_to(1000, 1000)
 end

答案 2 :(得分:1)

我在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无法点击的错误。

答案 3 :(得分: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

答案 4 :(得分:-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