水豚:page.execute_script()不工作

问题描述:

我试图模拟阻力,并在规范的RSpec feature.The execute_script线使用jquery.simulate库下降是:水豚:page.execute_script()不工作

page.execute_script("$('#slide_1').draggable();") 
page.evaluate_script("$('#slide_1').simulate('drag', {dragTarget: '#library_swap', interpolation: {stepWidth: 10, stepDelay: 300 }});") 
page.evaluate_script("$('#slide_1').simulate('drop');") 

如果我运行里面的线路在Chrome控制台上执行脚本,它的工作正常(拖放模拟工作),但不能与execute_script一起工作

+0

你是否有错误,或者它没有做到你期望的?第二个和第三个语句使用'evaluate_script'是否有原因? –

+0

@ThomasWalpole不,我没有收到任何错误,但脚本没有执行。在使用评估脚本之前,我使用了execute_script,但这两者都不起作用。 – Jaswinder

由于您没有收到任何错误,所以您传递给execute_script的JS代码实际上正在执行。既然你没有看到你期望的行为,最可能的解释是你在元素实际上在页面上之前执行JS,然后它会默默无闻地做任何事情。让我对代码感到困惑的一件事就是为什么你在#slide_1元素上调用draggable,因为我假设已经在你的应用中调用过。反正 - 在你execute_script通话添加的期望,以确保一个元素是页面

expect(page).to have_css('#slide_1') 
execute_script("$('#slide_1')... 

还应注意,不应该有你需要使用此三种不同execute_script调用任何理由,你可以只将它们合并成一个。在最近版本的水豚中,你也可以通过不再指定选择器来干掉命令,而是将元素传递给execute_script

slider = page.find(:css, '#slide_1') 
execute_script("$(arguments[0]). ... ", slider) 
+0

谢谢托马斯。我通过在第二行后添加睡眠来解决问题。实际上脚本正在执行,但似乎没有在UI上工作。 – Jaswinder