在 watir 中自动下载文件

2024-03-31

如何一键点击链接自动从浏览器下载 Excel 文件,而无需通过 watir 中的“另存为”和其他窗口。我试图保持它独立于操作系统,所以对使用 win32ole gem 不感兴趣。


为了这个任务,我调整了我的个人资料偏好

我的代码如下所示:

镀铬驱动程序:

profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.default_directory'] = download_directory
profile['download.prompt_for_download'] = false
browser = Watir::Browser.new :chrome, :profile => profile

镀铬驱动程序 2:

prefs = {
    'download' => {
        'default_directory' => download_directory,
        'prompt_for_download' => false,
        'directory_upgrade' => true, 
        'extensions_to_open' => '',
    },
    'profile' => {
        'default_content_settings' => {'multiple-automatic-downloads' => 1}, #for chrome version olde ~42
        'default_content_setting_values' => {'automatic_downloads' => 1}, #for chrome newer 46
        'password_manager_enabled' => false,
        'gaia_info_picture_url' => true,
    }
}

caps = Selenium::WebDriver::Remote::Capabilities.chrome
caps['chromeOptions'] = {'prefs' => prefs}
browser = Watir::Browser.new :chrome, :desired_capabilities => caps

firefox:

profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.lastDir'] = download_directory
profile['browser.download.folderList'] = 2
profile['browser.download.dir'] = download_directory
profile['browser.download.manager.showWhenStarting'] = false
profile['browser.helperApps.alwaysAsk.force'] = false
profile['browser.helperApps.neverAsk.openFile'] = "text/csv,application/pdf"
profile['browser.helperApps.neverAsk.saveToDisk'] = "text/csv,application/pdf"
profile['pdfjs.disabled'] = true
browser = Watir::Browser.new :firefox, :profile => profile

(我的 Firefox 示例仅适用于 pdf 文件)

但是selenium浏览器下载有很多bug

chrome 或 firefox webdriver 中的一些问题(像这样http://code.google.com/p/chromedriver/issues/detail?id=130 http://code.google.com/p/chromedriver/issues/detail?id=130) 不允许为文件下载编写良好的测试

我编写了以下 ruby​​ 脚本来下载文件

require ‘rubygems’
require “net/http”
require “uri”

def download(_url, _download_path = ”)
    url = URI.parse _url
    http_object = Net::HTTP.new(url.host, url.port)
    http_object.use_ssl = true if (url.scheme == ‘https’ || url.port == 443)

    http_object.start.request_get(url.path) do |response|
        start_time = Time.now
        response["Content-Disposition"] =~ /^.+?filename=”(.+?)”$/
        file_name = $1
        file = open(_download_path + file_name, ‘wb’)
        length = response['Content-Length'].to_i
        response.read_body do |fragment|
            file.write(fragment)
        end
        file.close
        file_size = File.size(_download_path + file_name)/1024.0/1024.0
        puts “-“*80
        puts “Download time – #{Time.now – start_time}”
        puts “Download speed – #{file_size/(Time.now – start_time)} MB/s”
        puts “-“*80
    end
end

download(‘http://storagemadeeasy.com/files/1cf064a30aba6d1b8fbc0fba8ac8be5b.jpg’)

我希望这段代码对那些需要测试文件下载(不是浏览器文件下载对话框窗口)的人有用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 watir 中自动下载文件 的相关文章

  • 从 Promise 块返回函数值

    我正在尝试编写一个函数 使用 WebdriverJS lib 来迭代元素列表 检查名称并构建与该名称对应的 xpath 定位器 我这里简化了xpath定位器 大家不用关注 我在这里面临的问题是 1 调用该函数返回未定义 据我了解 这是因为
  • 30000 毫秒后量角器超时

    我正在尝试将量角器 e2e 测试集成到我的巡航控制中 我正在使用以下测试规范 describe index function var ptor it should have a title function browser get http
  • 尝试使用 angularJS 和 c# webapi 从服务器下载文件

    将文件上传到服务器时效果很好 没有损坏的文件 但是 当我下载文件时 除了纯txt 它们起作用 它们的规模不断扩大并变得腐败 经过大量调查后 我不知道可能出了什么问题 我只是写文件 作为响应流并下载 blob 欢迎任何想法 严重依赖此线程来解
  • 使用 Selenium 从 twitter 抓取动态推文

    这可能看起来像一个重复的问题 但相信我 我在 Twitter 上观察到了一些新东西 我之前制作了一个 Twitter 抓取工具 它使用滚动和等待动态元素来获取给定数量的推文 但现在好像不行了 它不会抓取超过 10 条推文 此外 它抓取的推文
  • 如何在 Spyder IDE 中安装 Selenium 包

    我刚刚在工作中安装了 Spyder IDE 仅 Spyder 不是整个 Anaconda 并且希望使用 FireFox 自动化我的工作 我的问题是 如何安装 Selenium 软件包 I figured it out Here is ins
  • 是否可以下载 Ruby gem 而不自动安装它?

    当我使用下载东西时gem我希望能够只下载 gem 然后选择是否要安装它 我问这个问题是因为我想在多台计算机上安装特定的 gem 而不是在每台计算机上从互联网安装 宝石获取 所以 像 gem fetch gosu 这将离开gosu 0 7 1
  • 访问影子 DOM 中的元素

    是否有可能查找 Shadow DOM 中的元素与蟒蛇硒 示例用例 我有这个input with type date
  • 如何使用 Angular2 或更高版本下载文件

    我有一个 WebApi MVC 应用程序 我正在为其开发一个 angular2 客户端 以替换 MVC 我在理解 Angular 如何保存文件时遇到一些困难 请求没问题 与 MVC 一起工作正常 我们可以记录收到的数据 但我不知道如何保存下
  • 尝试使用javascript下载网站上的所有图像

    我需要一些有关此脚本的帮助 我正在尝试使该脚本下载网页上的所有图像 它可以很好地下载第一个图像 然后当 Google Chrome 尝试下载其余图像时 它会显示 无文件 一些帮助将不胜感激 我通过将其粘贴到 JavaScript 控制台来运
  • 滚动到特定元素 Selenium WebDriver Java

    我在用着Selenium with Java and ChromeDriver在网站上运行一些脚本 我想将驱动程序或页面滚动到页面上的特定元素 它可能是可见的 我明白 随着JavascripExecutor这是可能的 但到目前为止我所做的方
  • 在使用 Selenium 和 java 时在网格中应用过滤器后无法选择第一行[棘手的情况]

    我遇到了这种奇怪的情况 找了好久都没有成功 请问这是怎么回事 让我给你解释一下 我正在尝试在网页中创建自动化 我必须输入 动态表中的特定值以及执行 ENTER 事件后 需要选择显示的第一行 运行我的代码后 我得到了这个 但显示的行未被选择
  • 如何使用 Selenium WebDriver 获取 CSS 选择器?

    我正在尝试创建横幅菜单中显示的元素的动态 元素映射 包括为每个菜单显示的链接 该地图将存储在String 矩阵 它将用于不同的方法和测试 为此 我得到了元素的href属性并为菜单中显示的每个链接创建我自己的 CSS 选择器 这是我创建 CS
  • Protractor 测试用例在 Internet Explorer 11 中不起作用

    量角器测试用例在 Windows 10 企业版上的 Internet Explorer 11 中不起作用 Protractor conf js has below configuration seleniumAddress http loc
  • 如何在 selenium webdriver 中将网络浏览器从 Firefox 更改为 Chrome/Opera/IE/Safari?

    如何将浏览器从 firefox 更改为在 selenium webdriver 中工作的 Chrome Opera IE 请指导步骤以及代码片段 如果您对上述任何浏览器有答案 请回复 我读了很多这方面的内容 但无法正确链接 首先 您需要将正
  • Android:直接从浏览器下载文件

    我试图让 Android 浏览器下载特定类型 xxx 的文件 这样我就可以设置一个应用程序与其关联 我已经成功完成了关联部分 因为我已经做到了 以便在资源管理器应用程序中单击正确类型的文件会加载适当的应用程序 我希望这会转移到浏览器 这样如
  • AttributeError:“列表”对象没有属性“文本”,在 DOM 中查找元素时出错

    我尝试在树 DOM 中查找元素 但遇到问题 我写 age browser find elements by xpath div id ads ul li 6 span 2 text 但它一直显示我的错误 属性错误 列表 对象没有属性 文本
  • 通过 CLI 标志在隐身模式下启用 Chrome 扩展?

    我正在使用 selenium 来测试 chrome 扩展 部分扩展要求用户处于隐身模式 目前 除了添加参数之外 我还无法在启动时允许扩展程序处于隐身模式user data dir path to directory 这样做的问题是 它从我的
  • 将 PHP 生成的网页下载为 HTML 文件

    我正在使用基于 PHP 的 CMS 它使用
  • 始终等待页面加载到 PageObjects 上

    因此 当出现问题时 我只是创建了一个简单的 selenium JBehave 代码 我将首先发布简化的代码 然后稍后解释我的问题是什么 所以这里我们有一个简单的 AbstractClass 它将在我的 PageObjects 上继承 此类仅
  • Android Webview:无法调用确定的可见性() - 从未见过 pid 的连接

    我有一个 Android Webview 当我单击链接下载文件 pdf 图像等 时 我收到一条错误消息 Error message Cannot call determinedVisibility never saw a connectio

随机推荐

  • 致命错误:从无效上下文调用 private MyObject::__construct()

    在 PHP 中创建新对象时 我收到以下错误消息 Fatal error Call to private MyObject construct from invalid context我只是创建新对象 而不尝试显式调用构造函数 有谁知道发生了
  • 使用嵌入文本文件中的 File.ReadAllLines

    我一直在应用迄今为止在 Bob Tabors 绝对初学者系列中学到的知识 并为我女儿编写了一个小型控制台文字游戏 需要我生成一个随机的 5 个字母单词 我以前使用过File ReadAllLines path 从我的系统上的文本文件 wor
  • 如何限制谁可以在 github 存储库上合并为 master?

    我在我的 Github 存储库上进行了设置 主分支检查 激活 以下内容的分支保护规则 合并前需要审查请求请求 所需批准审稿人 1 包括管理员 限制谁可以推送到匹配的分支 然后我面临的情况是 团队中至少有一个人必须批准 PR 然后有人才能将自
  • 将Python源代码拆分到单独的目录中?

    以下是我的公司 foo com 使用的一些各种 Python 包 com foo bar web com foo bar lib com foo zig web com foo zig lib com foo zig lib lib1 co
  • 在函数内用 $ 索引数据框?

    许多 R 教科书鼓励使用 从 data frames 检索变量 列 但是 我发现这在函数内部不起作用 我不明白为什么 data BOD print BOD These work BOD demand BOD demand This work
  • 以特定格式将数据存储在txt文件中

    我的问题与我之前的问题相关 如何以特定格式显示txt文件中的数据 https stackoverflow com questions 731917 how to display data from txt file in specific
  • jQuery UI 选项卡禁用选项卡导航

    我尝试使用禁用选项卡导航 var tabs tabs tabs select function event ui return false 但是 这也会禁用我用于导航的流链接 input nexttab click function var
  • Form.ShowDialog() 并处置

    如果我有这样的方法 public void Show Form1 f new Form1 f ShowDialog 我还需要调用 dispose 吗即使它将超出范围 也将符合垃圾回收的条件 从一些测试来看 多次调用此 Show 在某些时候
  • Chrome 84 中缩小后的图像模糊

    最近一次 Google Chrome 更新后 我网站上的 Retina 图像变得模糊 它们仍然是视网膜图像 当我在新选项卡中打开图像时 它是双倍尺寸的图像 但由于某种原因 它们看起来模糊就像非视网膜图像一样 因此 图像的缩小算法似乎有问题
  • 从 R 中的 Facet_wrap ggplot2 中删除一个级别/组

    我的 tbl df gt str p2p dt SKILL A Classes tbl dt tbl data table and data frame 693 obs of 35 variables Patch Factor w 7 le
  • 使用 C# 中的 asp.net 表单登录屏幕抓取网站?

    是否可以为受表单登录保护的网站编写屏幕抓取程序 当然 我可以访问该网站 但我不知道如何登录该网站并在 C 中保存我的凭据 此外 任何 C 屏幕截图的好例子将不胜感激 这已经完成了吗 这很简单 您需要自定义登录 HttpPost 方法 你可以
  • Angular CLI 中未显示字体精美的图标:8.2.2 而是显示正方形

    我已经安装了 Font Awesome 通过npm install save font awesome angular font awesome from https www npmjs com package angular font a
  • Kotlin 中按多个字段对集合进行排序[重复]

    这个问题在这里已经有答案了 假设我有一个人员列表 我需要先按年龄排序 然后按姓名排序 来自 C 背景的我可以通过使用 LINQ 轻松地用所述语言实现此目的 var list new List
  • 使用“AsParallel()”/“Parallel.ForEach()”指南?

    寻求一些关于利用杠杆的建议AsParallel or Parallel ForEach 以加快速度 请参阅下面我得到的方法 此示例的简化 粗制化 它需要一个类似 美国 法国 亚太地区 的列表 其中 亚太地区 可能是其他 50 个 美国 法国
  • Python 版本识别错误

    我已经开始使用 pyqtdeploy 来使用 pyqt 并制作跨平台应用程序 不幸的是 当我实际尝试启动它时 我收到错误 启动器中的致命错误 无法使用 C Python34 python exe C Python34 pyqtdeploy
  • objectify-appengine - 嵌入式类 - 不是受支持的属性类型

    我正在谷歌应用程序引擎上尝试objectify 版本2 2 3 嵌入类示例 wiki 我收到此错误 java lang IllegalArgumentException one com mypkg LevelOne is not a sup
  • YUI 圆形输入框

    是否可以使用 YUI 将我的所有输入框更改为圆角 我无法使用背景图像 因为输入的宽度是可变的 并且我无法添加围绕它们的 div 因为生成了一些输入元素 另外 我不能使用边框半径或任何 moz webkit 变体 因为它需要在 IE6 中显示
  • 如何使用 DataStax Java 驱动程序设置 Cassandra 客户端到节点加密?

    我已在 Cassandra 集群上设置了节点到节点加密 现在我想设置客户端到节点 根据本文档 http www datastax com documentation cassandra 2 0 cassandra security secu
  • Android 6.0 未经许可捕获图像

    我需要让用户使用 Android 6 0 拍照 从图库或相机应用程序 因为我不需要控制相机 所以我想使用此处描述的意图 但是 如果您不需要此类控制 则可以仅使用 ACTION IMAGE CAPTURE 意图来请求图像 当您启动意图时 系统
  • 在 watir 中自动下载文件

    如何一键点击链接自动从浏览器下载 Excel 文件 而无需通过 watir 中的 另存为 和其他窗口 我试图保持它独立于操作系统 所以对使用 win32ole gem 不感兴趣 为了这个任务 我调整了我的个人资料偏好 我的代码如下所示 镀铬