Capybara Element在点上无法点击

时间:2017-03-26 17:39:31

标签: ruby selenium capybara

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

1 个答案:

答案 0 :(得分:2)

由于页面上的唯一商品我可以找到匹配的&lt; span class =&#34; nav-item-btn-text&#34;&gt;&lt; / span&gt;在固定的标题中,我猜测你是否以太小的窗口大小运行测试,因此当你运行测试时,你要点击的实际登录按钮是不在页面上的。这意味着当测试单击按钮时,它需要将项目滚动到视图中,并通过将其滚动到页面顶部来实现。这使得按钮位于固定标题后面,无法单击。要解决这个问题,你可以

  1. 增加窗口大小,因此表单不需要滚动

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

  3. 在点击按钮

  4. 之前自己滚动页面

    此外,你有理由使用find(...)。set vs只使用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