2

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

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%20 PM.html

如您所见,html 位于表单标签中。如果我尝试在不先通过表单的情况下访问 file_field,它会给我一个错误,说元素无法交互,因为它不可见。有人知道发生了什么吗?

4

3 回答 3

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 文件运行您的脚本并报告回来。

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

于 2011-09-03T09:55:49.720 回答
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

希望这可以帮助!

于 2011-12-01T16:13:54.227 回答
0

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

如您所见,html 位于表单标签中。如果我尝试在不先通过表单的情况下访问 file_field,它会给我一个错误,说元素无法交互,因为它不可见。有人知道发生了什么吗?

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

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

但是,这并没有解决您问题的“为什么不上传”方面,我怀疑这是您需要帮助的真正问题。但它确实解决了您问题的这一方面。

至于其余的,如果我自己无法与网站进行交互,很难说它为什么会这样。(如果该站点是 iTunes,您应该查看他们的服务条款关于使用自动化访问该站点的内容)

于 2011-11-23T20:18:28.427 回答