Watir - file_field调用在驱动Chrome时点击了错误的元素

时间:2013-03-07 17:52:41

标签: selenium webdriver watir

使用包含选择文件输入的表单的网页,如下面的代码段所示:

<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>

2 个答案:

答案 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