使用此代码我无法将文件正确上传到网站。
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而不先通过表单,它会给我一个错误,说元素无法与之交互,因为它不可见。任何人都知道发生了什么事?
答案 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,您应该检查他们的服务条款对使用自动化访问网站的说法)