水豚元素在某处不可点击

Capybara Element is not clickable at point

我试图使用 capybara 帮助我将词汇上传到 memrise.com,但我在其登录页面遇到了一些问题。

这是我写的。

def sign_in
  self.visit 'https://www.memrise.com/login/'
  find(".inpt-large[name='username']").set 'my-username' # Step 1
  find(".inpt-large[name='password']").set 'my-password' # Step 2
  find('input.btn-success.btn-large').click              # Step 3
end

它可以完成 step1setp2 但有时会在 step3 失败。

下面是错误信息。

gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/response.rb:70:in `assert_ok': Element is not clickable at point (592.5, 23). Other element would receive the click: <span class="nav-item-btn-text"></span> (Selenium::WebDriver::Error::UnknownError)

由于页面上我能找到匹配的唯一项目 在固定的 header 中,我猜你'重新 运行 使用太小的 window 大小重新测试,因此当测试 运行 时,您想要点击的实际登录按钮不在页面上。这意味着当测试去点击按钮时,它需要将项目滚动到视图中,它通过将它滚动到页面顶部来实现。这使得固定 header 后面的按钮无法被点击。要解决这个问题,您可以

  1. 增加 window 大小,这样表单就不需要滚动了

  2. 在您的 driver 注册中将 elementScrollBehavior 功能设置为 1 这将导致元素滚动直到它们在页面底部可见而不是顶部。

  3. 在点击按钮之前自己滚动页面

此外,您使用 find(...).set 与仅使用 fill_in 相比是否还有其他原因?

def sign_in
  visit 'https://www.memrise.com/login/'
  within('form#login') do
    fill_in('username', with: 'my-username')
    fill_in('password', with: 'my-password')
    click_button('Login')
  end
  assert_text('You are now logged in') # whatever messagge is shown once login complete
end