2015-12-01 27 views
1

我想一些文件附加到这个输入:attach_file不与水豚,WebKit的工作的正确途径

<input type="file" name="image" multiple="" accept="image/*"> 

我的代码,当我使用selenium驱动程序工作,是:

attach_file('image', File.absolute_path('../pictures/pic1.JPG')) 
attach_file('image', File.absolute_path('../pictures/pic2.JPG')) 
attach_file('image', File.absolute_path('../pictures/pic3.JPG')) 

的问题,当我使用capybara-webkit:作为输入是隐藏的,有些内容重叠,我需要改变一些CSS属性:

page.execute_script("$('input[name=image]').css('opacity','1')") 
page.execute_script("$('input[name=image]').css('position','fixed')") 
page.execute_script("$('input[name=image]').css('top','620px')") 

即使测试通过,图片也无法正确上传。如果我使用page.save_screenshot('after_upload.png')来看看发生了什么:

预期结果(并导致使用时selenium驱动程序) - >enter image description here

实际结果使用capybara-webkit时 - >enter image description here

回答

0

我只是找到了一个 “修复”:每次上传图片后都放上sleep(3)

+1

你不应该使用睡眠(3),而是检查当新图像完成上传时在页面上发生变化的东西 - 所以如果添加了一个类似expect(page).to have_selector('img.uploadeded',count:1)或其他。这样,水豚只需要等待动作完成就可以完成 –

+0

是的,汤姆。我会改进测试,但目前我发现了一个“修复”。有什么办法可以检查一个按钮是否被启用并可点击?因为在照片上传之前,“发送照片”按钮被禁用,并且在照片上传后启用,所以我可以替换“sleep(3)”来检查这个元素。 – fabersky

+1

如果它实际上是一个html按钮元素,并且被禁用的属性被禁用,那么在它被启用之前,capybara将不会找到它 - 即。期望(页面).to have_button('上传')或click_button('上传')将在返回或点击前启用该按钮,当然如果通过其他方式禁用它,则需要出现用你自己的选择器。另外请注意,如果在JS实际禁用按钮之前运行,那么也会有问题。 –