如何处理无法加载的页面并在 Watir-Webdriver 中继续测试

2023-12-15

我已经寻找其他问题的答案,但找不到。

我的问题是,我有许多需要测试的结果,但当我点击不加载页面的 URL 时,我的脚本不断失败。以下网址无法加载。当此 URL 未加载时,我想继续测试。

我尝试过使用:

begin
  Timeout::timeout(30) do

    //enter part that is hanging
  end
end

然而脚本只是退出。以下是我正在使用的完整脚本。该脚本将超时并退出......

browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search"

关于如何允许脚本继续(绕过此 URL 的测试)并进入下一个的任何想法?

require "watir-webdriver"
browser = Watir::Browser.new :ff
browser.goto "http://www.mycounciltax.org.uk/results?postcode=cv5+6bz&search=Search"
content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
require 'win32ole'

application = WIN32OLE.new('Excel.Application')
application.visible = TRUE
workbook = application.Workbooks.Add();
worksheet = workbook.Worksheets(1);
worksheet.visible

row = 1; column = 0
content.each do |array|
  array.each do |element|
    worksheet.Cells(1,1).offset(row,column).value = element #.offset(row,column)
    column += 1
  end
  row += 1
  column = 0
end


browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search"
if browser.table.exists?
  content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
  row = 1; column = 0
  content.each do |array|
    array.each do |element|
      worksheet.Cells(1,125).offset(row,column).value = element #.offset(row,column)
      column += 1
    end
    row += 1
    column = 0
  end
else
  content =0
end



browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search"
if browser.table.exists?
  content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
  row = 1; column = 0
  content.each do |array|
    array.each do |element|
      worksheet.Cells(1,130).offset(row,column).value = element #.offset(row,column)
      column += 1
    end
   row += 1
   column = 0
  end
else
  content =0
end

    
browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search"
if browser.table.exists?
  content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
  row = 1; column = 0
  content.each do |array|
    array.each do |element|
      worksheet.Cells(1,135).offset(row,column).value = element #.offset(row,column)
      column += 1
    end
    row += 1
    column = 0
  end
else
  content =0
end

Update

我的意思是说,我想在执行 if else(将表输出到 Excel 中)之前测试每个 url 是否加载。我可以做一些类似的事情吗

require "watir-webdriver"
browser = Watir::Browser.new :ff
browser.goto "http://www.mycounciltax.org.uk/results?postcode=cv5+6bz&search=Search"
content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
require 'win32ole'

application = WIN32OLE.new('Excel.Application')
application.visible = TRUE
workbook = application.Workbooks.Add();
worksheet = workbook.Worksheets(1);
worksheet.visible

row = 1; column = 0
content.each do |array|
  array.each do |element|
    worksheet.Cells(1,1).offset(row,column).value = element #.offset(row,column)
    column += 1
  end
  row += 1
  column = 0
end

begin
  browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search"
  if browser.table.exists?
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
    row = 1; column = 0
    content.each do |array|
      array.each do |element|
        worksheet.Cells(1,125).offset(row,column).value = element #.offset(row,column)
        column += 1
      end
      row += 1
      column = 0
    end
  else
    content =0
  end
rescue => e
  puts "rescued #{e}"
end

begin
  browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search"
    if browser.table.exists?
      content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
      row = 1; column = 0
      content.each do |array|
        array.each do |element|
          worksheet.Cells(1,130).offset(row,column).value = element #.offset(row,column)
          column += 1
        end
       row += 1
       column = 0
     end
  else
    content =0
  end
rescue => e
  puts "rescued #{e}"
end

begin   
  browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search"
  if browser.table.exists?
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
    row = 1; column = 0
    content.each do |array|
      array.each do |element|
        worksheet.Cells(1,135).offset(row,column).value = element #.offset(row,column)
        column += 1
      end
      row += 1
      column = 0
    end
  else
     content =0
  end
rescue => e
    puts "rescued #{e}"
end

您问的这个问题,以及此类问题可能指向您如何组织和运行脚本的更大问题。

在大多数情况下,我的第一个建议是使用现有的测试框架、测试/单元黄瓜、健身等。所有这些都旨在将测试作为小原子项目运行,如果出现任何问题,这些项目会报告失败,然后转移到下一个测试。 (与大多数自制脚本相反,这些脚本通常是一个巨大的长序列,如果出现问题,就会中断,并且无法应对任何意外故障,或者某种单步处理文件的处理循环,并且仍然存在相同类型的问题。我'我不确定这是否适用于您,因为据我所知,您似乎使用 watir 来进行抓取而不是测试。

如果您正在滚动自己的框架,那么您需要将其设计到系统中。它被称为“异常处理”,基本格式如 Zeljko 在他的回答中所描述的。快速谷歌搜索您会发现有关 Ruby 语言这方面的多个教程。

您上面编辑的代码与此更接近,但对我来说看起来相当重复。 (尽管由于它目前显示为全部左齐平,所以很难理解。所以我编辑它以添加缩进,啊,这样更好......)我会考虑将您重复三遍的内容转换为接受 URL 的方法和电子表格位置作为参数,这将减少重复次数。

此外,您可能会发现在开始/救援/结束中包装少量代码行更有用,以便报告有关失败的更有用的消息。这将允许您报告诸如“加载页面#{url}时出错”之类的内容,您甚至可以将其写入电子表格。

我建议您阅读一些有关错误如何通过系统“冒泡”的内容,以便故障可以提供更多信息。

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

如何处理无法加载的页面并在 Watir-Webdriver 中继续测试 的相关文章

  • 如何处理 Nokogiri 中的 404 未找到错误

    我正在使用 Nokogiri 来抓取网页 很少有 url 需要猜测 当它们不存在时 会返回 404 未找到错误 有没有办法捕获这个异常 http yoursite page 38475 gt page number 38475 doesn
  • Ruby ActiveRecord 和 sql 元组支持

    ActiveRecord 是否支持 where 子句中的元组 假设底层数据库支持 结果 where 子句看起来像这样 where name address in John 123 Main St I tried Person where n
  • ruby 字符串到哈希值的转换

    我有一个这样的字符串 str uu p xx m yy n zz m 我想知道如何将给定的字符串转换为哈希值 即我的实际要求是 有多少个值 符号之前 有m n和p 我不需要计数 我需要一个精确的值 这样输出效果会更好 m gt xx zz
  • 更改 en.yml 文件中的属性名称不起作用

    我更改了 ruby on Rails 项目中 en yml 文件中的属性名称 按钮工作正常 但字段属性并没有改变 这是我的模型 class Enr AffordableWarmth lt ActiveRecord Base self tab
  • 带有 Rake 的 RubyMine 调试器?

    使用 RubyMine 3 0 我设置了 Rake 配置来运行单元测试 然后我设置了一些断点 然后运行 Rake 任务 没有命中断点 测试只是像平常一样执行 然后退出 RubyMine 调试器无法通过 Rake 运行吗 尝试这个 转到运行
  • 自动将 JSON 对象映射到 Ruby 中的实例变量

    我希望能够自动将 JSON 对象解析为实例变量 例如 使用此 JSON require httparty json HTTParty get http api dribbble com players simplebits gt shots
  • 错误:执行 gem 时... (Gem::FilePermissionError)

    我检查了所有其他类似的答案 没有一个与我的完全一样 这些解决方案也不适合我 gem environment and sudo gem environment给出相同的结果 RubyGems Environment RUBYGEMS VERS
  • 处理 Rails 2.1.x 中的 RoutingError 的最佳方法?

    我正在使用Rails 2 1 中的routing rb 代码 并尝试让它达到这样的程度 我可以对找不到合适路径时抛出的RoutingError 异常执行一些有用的操作 这是一个有点棘手的问题 因为有一些 URL 类别纯粹是糟糕的 azenv
  • 以 Rails 形式处理 MongoMapper EmbeddedDocument

    首先 我对一般编程和 Rails 都是新手 我选择 Rails 是因为它看起来是一种很容易上手的语言 对于我的项目 我将 MongoMapper 与 Rails 结合使用 我正在尝试以与文档相同的形式处理嵌入文档 我有以下模型 class
  • Ruby:创建日期范围

    我正在寻找一种优雅的方式来制作一系列日期时间 例如 def DateRange start time end time period end gt gt results DateRange DateTime new 2013 10 10 1
  • 不理解 Ruby ljust/rjust/center 方法

    我正在学习嵌套 我的任务是使每条新行都以缩进开头 这是我的代码 但它不起作用 nestingDepth 0 def logger description block puts Beginning description rjust nest
  • STI 在遗传类型之间发生变化。

    在我的模型中 我像这样使用 STI 车辆型号 vehicle rb class Vehicle lt ActiveRecord Base end 车型 car rb class Car lt Vehicle end 总线模型 bus rb
  • 使用 ActiveRecord::Relation 时的 RSpec 匹配器

    所以这是我要测试的方法 def self by letter letter where lastname LIKE letter order lastname end 简单问一下 letter 后面的百分号到底有什么作用 跟格式化有关系吗
  • Mac + Ruby:无法访问 Socket 的 ioctl?怎么修?

    一天中的好时光 红宝石代码 def hw address iface sock Socket new Socket AF INET Socket SOCK DGRAM 0 buf iface pack a16h16 sock ioctl S
  • 从哈希中删除 nil 值

    我希望从哈希中删除具有nil value article是一个存储每篇文章的类 并且attributes方法将文章存储为散列 预期结果 articles results author null title Former bar manage
  • 用于验证网络路径的正则表达式 PHP、jQuery、JavaScript、Ruby

    尝试找出用于验证网络路径的正则表达式 即 comp xyz or comp or comp x y z storage或者所有部分都更长的东西 但希望能够传达其要点 我目前拥有的是一个简单的输入字段 用户可以通过它传递信息 事情是我不希望他
  • Nokogiri 相当于 jQuery Closest() 方法,用于在树中查找第一个匹配的祖先

    jQuery 有一个可爱的方法 虽然命名有些错误 称为最接近 http api jquery com closest 它会沿着 DOM 树向上寻找匹配的元素 例如 如果我有这样的 HTML table src foo tr td Yay t
  • rspec 测试 has_many :through 和 after_save

    我有一个 我认为 相对简单的has many through与连接表的关系 class User lt ActiveRecord Base has many user following thing relationships has ma
  • 使 case/switch 返回值的快捷方式

    我很确定我看到有人做了像下面的代码这样的快捷技术 这不起作用 return case guess when guess gt answer then high when guess lt answer then low else corre
  • Ruby openssl 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有 Ruby 的在线文档openssl图书馆 我能找到的只是博客文章和第三方文章 而 rdoc 本

随机推荐

  • 所有 BlackBerry 设备的 UI 兼容性

    我为 BlackBerry 编写了一个简单的应用程序 并使用 9630 模拟器进行了测试 如何获得与所有模拟器兼容的 UI 设计 测试 测试 测试 如果您需要您的应用程序在所有模拟器上运行 那么获取所有模拟器并尝试一下 轮缘做得很好为您提供
  • 在python中读取PFM格式

    我想读书PFM使用 Python 格式化图像 我尝试过imageio read但它抛出一个错误 请问我可以有什么建议吗 img imageio imread image pfm 以下 Python 3 实现将解码 pfm 文件 下载示例纪念
  • 无法将 create_async() 与 WRL WinRT 组件一起使用

    我想使用 WRL 编写一个支持异步的 WinRT 组件 但我发现create async 即使我包括了 也是未定义的ppltask h and using namespace concurrency如何使用WRL模式创建后台任务 我的功能是
  • 获取 Spark ML 多层感知器分类器的输出层神经元值

    我正在使用 Spark ML 多层感知器分类器进行二元分类 mlp MultilayerPerceptronClassifier labelCol evt featuresCol features layers inputneurons i
  • map(&:name) 在此 Ruby 代码中做了什么?

    为了更好地理解 Ruby 我在网上冲浪时遇到了以下代码 require rubygems require activeresource ActiveResource Base logger Logger new File dirname F
  • 如何更改 Android M 中拒绝/授予的权限?

    我怎样才能让用户有机会更改应用程序中的权限 他已经设置了授予 拒绝 假设用户拒绝了权限 稍后他希望我们授予此许可 是否可以 我怎样才能做到这一点 如果用户拒绝了该权限 您可以检查该权限 如果他也检查了不再显示 在这种情况下 您可以打开自己的
  • 基于范围的 for 循环中 range-init 的生命周期是多少?

    在最新的 C 标准中 它意味着 for foo bar baz 相当于 auto r bar for auto it r begin end r end it end it foo it baz 当上面的 bar 是一个返回集合的函数调用时
  • 带 Break 的无法到达语句

    所以我之前有一个问题 但意识到我发布了错误的违规代码 我已在下面标记了令人反感的言论 我想要做的是使用该 switch 语句设置每个运算符的优先级 也许有人可以指出我正确的方向 请注意 我正在运行 JAVA 7 因此 String Swit
  • boost::function 和 boost::bind 如何工作

    我不喜欢让魔术盒散布在我的代码中 这两个类到底是如何工作的 以允许基本上任何函数映射到函数对象 即使函数具有与我传递给的参数完全不同的参数集boost bind 它甚至适用于不同的调用约定 即成员方法是 thiscall在VC下 但 正常
  • SQL Access INSERT INTO 失败

    我正在尝试制作一个使用 OLEDB 连接到 Microsoft Access 数据库的 Visual Basic 应用程序 在我的数据库中 我有一个具有以下布局的用户表 ID Autonumber Username Text Passwor
  • 动态设置自动管道的参数值

    如果我创建一个参数 我可以在手动运行管道时设置其值 但是当管道自动运行时 它使用默认值 当管道自动运行时 例如响应推送到存储库 是否有任何方法可以向其传递参数值 这是我正在使用的 yaml 文件 目标是能够控制在管道中运行哪些测试 para
  • DataGridView 和 List<> 与 BindingSource 的数据绑定

    我想弄清楚数据如何绑定BindingSource应该可以工作 我想要一个DataGridView填充 a 的内容List lt gt 更新列表后 我可以看到List当我检查调试器时 增长并验证它是否被填充 我以为BindingSource当
  • 如何让 TFS 2010 检测对 Visual Studio 之外的文件所做的更改?

    我将 Team Foundation Server 2010 与 Visual Studio 2010 结合使用 每当我在 Visual Studio 之外修改文件时 TFS 似乎都没有检测到对文件所做的更改 因此不提供在修改文件后签入文件
  • 如何在 R 中正确嵌套 Paste() 函数?

    你能告诉我为什么吗 paste paste c first second collapse third collapse and 给我 first second third 代替 first second and third 获得第二个输出
  • 如何在Python中使用mysqldump和mysql复制数据库?

    我正在编写一个简单的 Python 脚本来复制 MySQL 数据库 我正在尝试根据以下问题及其答案复制数据库 不使用 mysqldump 复制数据库 python 子进程和 mysqldump and Python 子进程 mysqldum
  • Java中谷歌计算引擎与数据存储和云存储的通信

    我有 GAE 应用程序 它在 Google Cloud Datastore 中创建一些数据并将一些二进制文件存储到 Google Cloud Storage 让我们调用该应用程序WebApp 现在 我在 Google Cloud Stora
  • 静态上下文中的本地类实例创建表达式

    The JLS 15 9 2告诉我们如何确定封闭实例 令 C 为正在实例化的类 并令 i 为正在创建的实例 如果 C 是一个内部类 那么我可能有一个直接封闭的 实例 8 1 3 确定如下 如果 C 是本地类 则 如果 C 出现在静态上下文中
  • 詹金斯文本查找器无法成功我的构建

    我使用 SSH 插件在 Linux 服务器上运行命令 我使用 SSH 启动了一个脚本 该脚本需要超过 1 小时的时间才能运行 我不想等待那么多时间 所以我在 Exec 超时处设置了 30 秒的时间 但它显示错误 错误 发布时出现异常 异常消
  • 在 kubernetes 中使用 mongoose 连接到 mongodb

    我有一个使用 docker compose 开发和测试的微服务 现在我想将它部署到kubernetes 我的 docker compose 文件的一部分如下所示 tasksdb container name tasks db image m
  • 如何处理无法加载的页面并在 Watir-Webdriver 中继续测试

    我已经寻找其他问题的答案 但找不到 我的问题是 我有许多需要测试的结果 但当我点击不加载页面的 URL 时 我的脚本不断失败 以下网址无法加载 当此 URL 未加载时 我想继续测试 我尝试过使用 begin Timeout timeout