我尝试使用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
它可以完成step1
和setp2
但有时会在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)
答案 0 :(得分:2)
由于页面上的唯一商品我可以找到匹配的&lt; span class =&#34; nav-item-btn-text&#34;&gt;&lt; / span&gt;在固定的标题中,我猜测你是否以太小的窗口大小运行测试,因此当你运行测试时,你要点击的实际登录按钮是不在页面上的。这意味着当测试单击按钮时,它需要将项目滚动到视图中,并通过将其滚动到页面顶部来实现。这使得按钮位于固定标题后面,无法单击。要解决这个问题,你可以
增加窗口大小,因此表单不需要滚动
在您的驱动程序注册中将elementScrollBehavior
功能设置为1
,这将导致元素滚动,直到它们在页面底部而不是顶部可见。
在点击按钮
此外,你有理由使用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