我试图弄清楚如何使用rspec测试jQuery fadeIn / fadeOut行为。我确实有以下情况:
在页面上有一个复选框。如果选中该复选框,则会显示另一个输入字段。如果不是,则隐藏输入字段。我用来显示和隐藏输入字段的动画是jQuery fadeIn / fadeOut效果。
在我的功能测试中,我想检查当勾选复选框时,输入字段显示在页面上,如果未选中,则不显示输入字段。现在的问题是,当我在我的rspec中调用check('#checkbox_recurring')然后立即测试时,如果输入字段在页面上,它可能会失败,因为jQuery动画还没有完成。 / p>
如何测试这样的场景?
感谢您的帮助!
答案 0 :(得分:1)
我无法弄清楚如何让jQuery fadeIn工作,但我用过切换。我希望这没关系。
<html>
<head>
<style>
#input {
font-weight: bold;
font-size: 16px;
}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<input type='checkbox' id='check'>Toggle</button>
<input id = 'input' placeholder = 'name'></input>
<script>
$( "#check" ).click(function() {
$( "#input" ).toggle( "slow" );
});
</script>
</body>
</html>
您需要使用ruby sleep (time)
等待jQuery / AJAX元素完成。这是一个解释Watir wait methods的链接。
我使用Rspec和Watir-Webdriver来自动化浏览器。这是一个快速的片段,这可能更干净,但它应该为你想要完成的事情提供一些方向。
require 'rspec'
require 'watir-webdriver'
describe 'fade' do
before(:all) do
@browser = Watir::Browser.new :chrome
@browser.goto('file:///C:/Users/bashir.osman/Desktop/test.html')
end
it 'checks fade' do
puts "so...#{@browser.input(:id, 'check').exists?}"
@browser.input(:id, 'check').click
sleep 1
exists1 = @browser.input(:id, 'input').visible?
if exists1 == false
puts 'Currently input is not visible'
puts 'Will click input again'
@browser.input(:id, 'check').click
sleep 1
exists2 = @browser.input(:id, 'input').visible?
exists2.should == true
end
end
end
这就是测试的作用:
#input
是否可见。这应该返回false。 我不会使用.exists?
,因为这将始终返回true,因为该元素存在于DOM中。如果元素存在且在页面上可见,则present?
返回true。 visible?
返回true / false,具体取决于元素是否可见。