【问题标题】:Watir-Webdriver: Uploading files isn't working correctly on firefoxWatir-Webdriver:上传文件在 firefox 上无法正常工作
【发布时间】:2011-12-02 00:13:54
【问题描述】:

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

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,它会给我一个错误,说元素无法交互,因为它不可见。有人知道发生了什么吗?

【问题讨论】:

    标签: ruby watir watir-webdriver


    【解决方案1】:

    您要上传的本地文件不能存在于本地。

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

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

    【讨论】:

    • 点击我刚刚添加到帖子中的链接,您会看到更多的 html。我在 mac os 10.7.1 上使用 firefox v. 5.0.1。此外,folderName 是包含所需文件的文件夹的变量。
    • 仍然无法重现您的问题 - 请参阅上面的编辑答案。你真的,真的确定本地文件存在吗?
    • 100% 确定它存在。 &gt;&gt; File.exists? ""+folderName+"/iTunesArtwork" =&gt; true
    • 实际站点上的选择文件按钮也有点不同。不确定这是否会有所作为? cl.ly/1i421Z1D3d0j2R3a3t3f
    • 您是要上传单个文件还是整个目录? 'iTunesArtWork' 不是目录吗?
    【解决方案2】:

    我无法让 file_field.set 工作,直到我开始为其提供文件的绝对路径。

    我的代码如下所示:

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

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多