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

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

我的问题是我需要测试一些结果,但是当我点击没有加载页面的Url时,我的脚本会一直失败。 以下Url无法加载。 当此Url未加载时,我想继续我的测试。

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

我试过用:

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 

更新

我的意思是说我想在执行if else之前测试每个url是否加载(将表输出到excel中)。 我可以按照这个方针做点什么吗?

 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 

我不确定你如何测试一个没有加载的页面,但尝试这样的事情:

 begin browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search" rescue => e puts "rescued #{e}" end 

您要问的这个问题,这类问题可能表明您组织和运行脚本的问题要大得多。

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

如果您正在编辑自己的框架,那么您需要将其设计到系统中。 它被称为“exception处理”,基本格式如Zeljko在其答案中所述。 快速谷歌搜索将找到关于ruby语言这方面的多个教程。

您上面编辑的代码更接近于此,但对我来说看起来非常重复。 (虽然因为它现在显示为所有刷新,所以很难理解。所以我编辑它来添加缩进,啊那更好……)我会考虑将你重复三次的东西变成一个接收URL的方法和电子表格位置作为参数,这将减少重复。

此外,您可能会发现在begin / rescue / end中包含少量代码行更有用,以便报告有关失败的更有用的消息。 这样您就可以报告“错误加载页面#{url}”之类的内容,您甚至可以将其写入电子表格。

我建议稍微阅读一下错误如何通过系统“冒泡”,以便故障可以提供更多信息。