2012-03-02 12 views
1

他の質問で回答を探しましたが、見つけられませんでした。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 

更新

私は(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 

答えて

1

の線に沿って何かをするが、このような何かを試みることができる:

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

ありがとうございました。 これは私が思うものではありません...私はスクリプトにこれを統合して、タイムアウトエラーが返っても(URLが機能しないため)スクリプトを続行できるようにしたいと思います。 – user1077250

+0

ありがとうございます。 これは私が思うものではありません...私はスクリプトにこれを統合して、タイムアウトエラーが返っても(URLが機能しないため)スクリプトを続行できるようにしたいと思います。 If elseを実行して結果をExcelシートに出力する前に、urlが動作するかどうかをテストするように、コードの各塊の周りに開始と救済を入れたいと思います。 – user1077250

+0

上記のコメントをより詳しく説明するために質問を更新しました。 – user1077250

3

あなたが求めているこの質問、この種の問題はおそらく、スクリプトをどのように編成し実行しているかという大きな問題を指しているはずです。

ほとんどの場合、最初の提案は既存のテストフレームワーク、テスト/ユニットキュウリ、フィットネスなどを使用することです。これらはすべて、何かがうまくいかない場合に失敗を報告する小さな原子アイテムとしてテストを実行するように設計されています次のテストに移動します。 (ほとんどの自家製スクリプトとは対照的に、何かが間違っていて、予期せぬ障害に対処できない場合や、何らかの処理ループがファイルを踏んで、同じ種類の問題を抱えている場合には、それがあなたに当てはまるのかどうかはわからないが、私が知る限りでは、テスト以上に手をこすっているようだ。

あなた自身のフレームワークを動かしているなら、システムでは例外処理と呼ばれ、基本的な書式はZeljkoの解答に記載されています。A quick google searchはRuby言語のこの側面に関する複数のチュートリアルを見つけます。

上記のコードはこれに近いですが、私にはかなり繰り返し見て。 (しかし、現在はすべてのフラッシングが表示されているので、意味を成しにくいので、インデントを追加するために編集しました。)URLを取り込むメソッドを3回繰り返すことを検討しますスプレッドシートの位置を繰り返す際にカットダウンするパラメータとして使用します。

また、begin/rescue/endの中に少数のコード行をラップして、何が失敗したかについてのより有用なメッセージを報告する方が便利かもしれません。そうすれば、「エラーロードページ#{url}」のようなレポートをスプレッドシートに書き込むこともできます。

私は、エラーがシステムの中でどのように「バブルアップ」することができるかを少しお読みになり、失敗が少し有益なものになることをお勧めします。

+1

+1チャックの答えです。私はフレームワークについてもっと学ぶために巨大なフレームワークを構築することを理解できますが、私はフレームワークを構築しません。彼はまた、テストごとに1つのことをテストする良い習慣についても正しいです。私はこれらすべてのコンテンツ= 0のものが何であるかはわかりませんが、どれくらいのものが正しいかを把握しているように見えます。 testunit、rspec、またはキュウリでそれらのそれぞれをテストするだけで、あなたのメトリックが上にバブルアップします。これを考慮するもう1つの方法は、テストフレームワークを構築するか、テストを設計する、あなたのコアコンピテンシーは何ですか? –

+1

あなたの答えをありがとう。私はフレームワークについて学び始めています。あなたのポイントを理解しています。 – user1077250

関連する問題