vasgen
vasgen

Reputation: 81

Element is not clickable at point (617, 690.5). Other element would receive the click: <th>...</th> (Selenium::WebDriver::Error::UnknownError)

I get the error above when trying to press the "add" button on the integration test I am trying to implement. I thought that was a delay with the javascript, and I tried the following, but none of them worked:

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

I tried all of the above, but that didn't solve the problem.

Upvotes: 5

Views: 8831

Answers (5)

Amir Shahheydari
Amir Shahheydari

Reputation: 101

I was getting the same error in Capybara when trying to click_button a 'Save' button at the end of a page. Scrolling and bringing the element to view using JS proved to be an effective workaround.

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

Update


For me, it turned out to be a mismatch between the version of installed Chrome and Chromedriver and no code change was necessary after all.

Chrome 61+ includes modifications to scrolling behaviors. A quick examination of Chromedriver page revealed that I had to upgrade my Chromedriver (from 2.29 to 2.32) in order to make the driver compatible with those changes. This was part of the Chromedriver 2.30 (Supports Chrome v59-61) release notes:

  • Fixes a bug where Chromedriver fails to click due to page scrolling changes in Chrome 61+.

Upvotes: 4

guero64
guero64

Reputation: 1049

I found resizing the browser window made a similar problem go away:

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

Upvotes: 5

Dan Kohn
Dan Kohn

Reputation: 34327

I had a sticky header that was preventing Selenium from sending the click to the right radio button on both Chrome and Firefox (though Poltergeist worked fine). This is a hack to delete all fixed elements (like sticky headers), and it worked for me:

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

Upvotes: 0

Milind
Milind

Reputation: 5112

I was facing a similar problem where I have to check two check boxes one after the other. But I was getting the same above error, hence I added a wait in between my steps for checking the checkboxes. It's working fine and great.

Here are the steps:-

  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

Upvotes: -1

Nat Ritmeyer
Nat Ritmeyer

Reputation: 5678

This is hardly a great answer, but I'll give it anyway...

I've only ever seen this problem when testing with Chrome. There are two solutions that worked for me:

  • Use Firefox instead of Chrome
  • Instead of find(selector).click, use page.execute_script("$(#{selector}).click()")

But since you've tried the second option and it didn't work, try using Firefox instead. Sorry :(

Upvotes: 5

Related Questions