如何处理无法加载的页面并在 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 中继续测试 的相关文章

随机推荐

  • 所有 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