我在尝试按下集成测试时按“添加”按钮时出现上述错误。我认为这是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
我尝试了以上所有方法,但这并没有解决问题。
答案 0 :(得分:5)
这不是一个很好的答案,但无论如何我都会给它......
我在使用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)发行说明的一部分:
答案 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