Watir-Webdriver:上传文件在firefox上无法正常工作

时间:2011-09-02 09:08:43

标签: ruby watir watir-webdriver

使用此代码我无法将文件正确上传到网站。

browser.form(:index, 2).file_field(:name, "filedata").set(""+folderName+"/iTunesArtwork")

一旦代码运行,它会显示它正在通过显示一个旋转轮进行上传,但它实际上从未上传过,而且轮子一直在旋转。如果我自己上传它,虽然它上传得很好。

这是html的链接: http://f.cl.ly/items/3v3o1p1g0t2S1q3q3Q1h/Text%202011.09.03%2011:40:06%20PM.html

正如您所看到的,html位于表单标记中。如果我尝试访问file_field而不先通过表单,它会给我一个错误,说元素无法与之交互,因为它不可见。任何人都知道发生了什么事?

3 个答案:

答案 0 :(得分:2)

您上传的本地文件不得在本地存在。

我已将您的HTML上传到:http://dl.dropbox.com/u/18859962/uploader.html

我试过了:

ruby-1.9.2-p290 :001 > require "watir-webdriver"
 => true 
ruby-1.9.2-p290 :002 > b = Watir::Browser.start "http://dl.dropbox.com/u/18859962/uploader.html"
 => #<Watir::Browser:0x..fdea53ebfe3940b9a url="http://dl.dropbox.com/u/18859962/uploader.html" title="untitled"> 
ruby-1.9.2-p290 :003 > b.file_field.exists?
 => true 
ruby-1.9.2-p290 :004 > local_file = "/users/me/ie.html"
 => "/users/me/ie.html" 
ruby-1.9.2-p290 :005 > File.exists? local_file
 => true 
ruby-1.9.2-p290 :006 > raise "error" unless File.exists? local_file
 => nil 
ruby-1.9.2-p290 :007 > b.file_field.set local_file
 => "/users/me/ie.html

请针对此托管的html文件运行您的脚本并报告回来。

此外,如果本地文件不存在,则应引发异常,以消除该错误。

答案 1 :(得分:1)

在我开始给它一个文件的绝对路径之前,我无法让file_field.set工作。

我的代码类似于:

relative_path = 'image.png'
full_path = File.expand_path relative_path
browser.file_field(:id, 'file_field_id').set full_path

希望这有帮助!

答案 2 :(得分:0)

就你问题的这一部分而言:

  

正如您所看到的,html位于表单标记中。如果我试图访问   file_field没有首先通过表单它会给我一个   错误说元素无法与之交互,因为它不是   可见。任何人都知道发生了什么事?

最可能的答案是,DOM中可能存在另一个具有相同名称且当前对用户不可见的输入字段。无法查看整个页面并查看所有HTML,我无法肯定地说,但是当我尝试与具有相同名称或文本的控件进行交互时,该错误是典型的,但是目前隐藏在视野之内。在页面代码中搜索我正在使用的名称或文本通常会发现另一个元素。更改我处理事物的方式(通过指定您正在执行的唯一容器,或者添加:index值以及现有标识符)将允许您获取元素的“正确”实例。

您可以切换到使用:id来标识字段(它有一个),并查看是否有效而无需先指定外部(表单)容器元素。无论如何,通常首选ID,因为如果值是有效的HTML,则该值在页面上应该是唯一的。

然而,这并没有解决你问题的'为什么不上传'方面,我怀疑这是你需要帮助的真正问题。但它确实解决了你问题的这个方面。

至于其余部分,我自己无法与网站互动,很难说它为什么会这样。 (如果网站是itunes,您应该检查他们的服务条款对使用自动化访问网站的说法)