使用包含选择文件输入的表单的网页,如下面的代码段所示:
<form ... >
<div class="form__wrap">
<ul class="form__list">
Import:
<label for="fileUploadInput" class="btn mediaChoose inline" id="fileUpload">Choose File</label>
<input class="mediaFile" id="fileUploadInput" name="file" type="file" />
</ul>
</div>
...
</form>
使用Watir WebDriver,以下内容返回true:
puts file_field(:id => "fileUploadInput").exists?
但是,下面的file_field调用导致Chrome上出现以下错误(适用于Firefox和IE):
file_field(:id => "fileUploadInput").set(pathtofile)
Element is not clickable at point (695, 314). Other element would receive the click:
<label for="fileUploadInput" class="btn mediaChooseinline" id="fileUpload">...</label>
答案 0 :(得分:3)
我的猜测是你正在驾驶Chrome,因为我之前看到过这样的错误。错误消息表示您正在尝试单击文件上载元素,但标签显示在其上,因此单击屏幕上的所需坐标将单击标签而不是文件上载元素。 Chrome在此时感到困惑并拒绝点击。
要确保这是问题,请尝试使用其他浏览器(例如Fireofox)使用相同的代码。经验表明,Firefox并不关心其他元素是否会收到点击。
答案 1 :(得分:0)
我尝试了与您发布的表单类似的缩小版表格,它在Chrome和Firefox中适用于我。这是在Windows机器上测试的。我注意到FireFox和Chrome的路径目录有不同的语法。
HTML -
<!DOCTYPE html>
<html>
<body>
<form action="demo_form.asp">
Import:
<label for="fileUploadInput" class="btn mediaChoose inline" id="fileUpload" >test</label>
<input class="mediaFile" id="fileUploadInput" name="file" type="file" />
</form>
</body>
</html>
测试代码
require 'watir-webdriver'
browser = Watir::Browser.new :firefox
browser.goto "C:\\Users\\mike\\ruby\\chrome1.html"
puts browser.file_field(:id => "fileUploadInput").exists?
#browser.file_field(:id => "fileUploadInput").set("c:\\Windows\\") #chrome
browser.file_field(:id => "fileUploadInput").set("c:\\Windows\\..") #firefox
browser.file_field(:id => "fileUploadInput").click