我在其他问题上寻找答案,但我找不到答案。
我的问题是我需要测试一些结果,但是当我点击没有加载页面的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
我的意思是说我想测试每个url是否在执行if else之前加载(将表输出到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
答案 0 :(得分:3)
您提出的这个问题,这类问题可能表明您在组织和运行脚本方面存在更大的问题。
我在大多数情况下的第一个建议是使用现有的测试框架,测试/单位黄瓜,健身等。所有这些都是为了将测试作为小的原子项运行,如果出现任何问题并报告失败,然后进入下一个测试。 (与大多数自制脚本相反,这些脚本通常是一个巨大的长序列,如果出现问题而无法应对任何意外故障,或者某种处理循环逐步执行文件,并且仍然存在相同类型的问题。我不确定这是否适用于你,因为你似乎正在使用watir进行刮擦而不是测试。
如果您正在推出自己的框架,那么您需要在系统中进行设计。它被称为“异常处理”,基本格式如Zeljko在其答案中所述。 A quick google search会找到关于ruby语言这方面的多个教程。
上面编辑的代码更接近于此,但对我来说看起来很重复。 (虽然因为它现在显示为所有刷新,所以很难理解。所以我编辑它来添加缩进,啊那更好......)我会考虑将你重复三次的东西变成一个接收URL的方法和电子表格位置作为参数,可以减少重复。
另外,您可能会发现在begin / rescue / end中包含少量代码行更有用,以便报告有关失败的更有用的消息。这样您就可以报告“错误加载页面#{url}”之类的内容,您甚至可以将其写入电子表格。
我建议稍微阅读一下错误如何通过系统“冒泡”,以便失败可以提供更多信息。
答案 1 :(得分:1)
我不确定你如何测试一个没有加载的页面,但尝试这样的事情:
begin
browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search"
rescue => e
puts "rescued #{e}"
end