3

次のシナリオの処理に問題があります。

Google Chrome を使用してシステムにログインするテスト スクリプトを作成しています。

私はExcelからデータを読んでいます。

最初のデータ セットのユーザー名とパスワードの組み合わせが正しくありません。

シナリオは、間違ったパスワードが入力された場合で、ポップアップ ウィンドウが表示され、ユーザー名/パスワードが正しくないというメッセージが表示されます。

この場合、ポップアップ ウィンドウを閉じることができるはずです。watir は、正しいユーザー名とパスワードの組み合わせが満たされるまで、Excel から次のデータ セットを読み取る必要があります。


問題は、ポップアップ ダイアログ ボックスを検出する方法がわからないことです。次のコードがあります。

<div id="alertMsg" style="width: auto; min-height: 76.69999980926514px; height: auto;" class="ui-dialog-content ui-widget-content"><div class="dialogBoxTitle">&nbsp;</div>
<div class="alertMessage pointSearch">    
    <form name="saveComfortModelForm" class="pointSearchFrm">
        <table cellpadding="0" cellspacing="0" width="100%" height="100%" class="pointSearchTable">
            <tbody><tr>
                <td>Login failed due to invalid password or username</td>
            </tr>
        </tbody></table>    
    </form>
</div></div>

また、ポップアップを閉じるリンクのクリックもあります。コードは次のとおりです。

<div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
<span class="ui-dialog-title" id="ui-dialog-title-alertMsg">&nbsp;</span>
<a href="#" class="ui-dialog-titlebar-close ui-corner-all" role="button">
<span class="ui-icon ui-icon-closethick">close</span>
</a>
</div>

このメッセージが表示されたら、ウィンドウを閉じることができるはずです。

4

1 に答える 1

0

You can detect if the popup dialog box is displayed by checking one of its element's visibility. This can be done with the visible? or present? methods. Try:

browser.div(:id => "alertMsg").present?
#=> Returns true if popup is displayed, false if not displayed

You can close the popup by clicking the close link:

browser.link(:class => "ui-dialog-titlebar-close").click

The watir part of the logic could be something like:

begin
  #Execute your logic to sign in with the next user/password

  #Check if the sign in was successful
  sign_in_successful = not(browser.div(:id => "alertMsg").present?)
  unless sign_in_successful
    browser.link(:class => "ui-dialog-titlebar-close").click
  end
end until sign_in_successful

Update: It seems that some do not prefer the begin-while/until and a loop should be used instead:

loop do
  #Execute your logic to sign in with the next user/password

  if browser.div(:id => "alertMsg").present?
    browser.link(:class => "ui-dialog-titlebar-close").click
  else
    break
  end
end

end

于 2012-11-14T05:23:21.763 に答える