1

私はWebAiiテストフレームワークの無料版[Telerikに買収される前にArtOfTestによってリリースされたもの]をかなり使用したので、基本的には機能することを知っています。ですから、私が今抱えている問題は完全に私を困惑させています。

既存のサイトでナビゲーションをテストし、一連のページを調べようとしています。(とりわけ)2つのボタンがあるページが表示されます。1つは、history.back()を呼び出すだけのjavascript関数を呼び出すonclickハンドラーを備えたボタンタイプの入力要素である「戻る」ボタンです。もう1つは送信ボタンです。

WebAiiは送信ボタンを見つけるのに問題はありません。しかし、私がそれをクリックするように言うとき、それは、すべての外観にとって、戻るボタンをクリックすることです。

このサイトの関連するHTMLは次のとおりです。

<div align="right"> 
    <table border="0" width="200" cellpadding="8" style="border-collapse: collapse" bordercolor="#E0DFE3"> 
        <tr> 
            <td> 
                <input type="button" value="<- Back" name="B2" onclick="cancelChange()" > 
            </td> 
            <td> 
                <input type="submit" value="Maint Details ->" name="lnkSubmit"> 
            </td> 
        </tr> 
    </table> 
</div> 

そして、これがテストコードです:

        HtmlInputSubmit maintDetailsButton = Find.ByAttributes<HtmlInputSubmit>("value=Maint Details ->"); 
        maintDetailsButton.Click(); 

        Assert.IsTrue(ActiveBrowser.Url.Contains(expectedPage), "URL {0} does not contain expected page {1}", ActiveBrowser.Url, expectedPage); 

手動でクリックすると、一連の操作が正常に機能しているため、サイトの問題であるという証拠はわかりません。実際、「詳細の保守」ボタンではなく「戻る」ボタンをクリックしているという証拠をたくさん見てきました。(Fiddlerは、クリック要求が送信されたときに発行された要求を表示しません。ブラウザーはキャッシュから再表示するだけなので、history.back()の実行と一致します。クリックすると、実際には前のページに移動します。最後に、戻るボタンから「onclick」属性を削除してボタンをクリックしても何も起こらない場合、テストコードを実行しても、サイトは何もしません。単に現在のページに留まります。)

私は完全に困惑しています。誰かが私にヒントを与えることができますか?

4

1 に答える 1

2

ええと、頭を壁に打ち付けるのに1週間かかりましたが、私はこれを理解しました.

まず、あることを発見しました。私が推測できることから、Find. を実行すると、WebAii はその要素を、ドキュメント内のそのタイプのすべての要素のリストへのインデックスとして追跡します。次に、見つかった要素にアクセスするたびに、WebAii は「document.GetElementsByTag('')[]」という形式の JavaScript 関数を生成します。WebAii が見つけた要素を識別する方法を見つけようとしたときに偶然これを発見し、実行しようとしていた関数を例外で表示する JavaScript エラーを誤って生成しました。そのため、インデックスで要素にアクセスしていて、何らかの形でそのインデックスがオフになっている場合、必要な要素の前に入力要素をクリックしていたことが理にかなっていると考えました。だから、Find.AllByTagName("input") を実行しました。VSデバッガーで結果のReadOnlyCollectionを調べ、見つかった入力要素と、ページのビューソースを見て識別できるものとの照合を開始しました。私は、WebAii がリストしていないものを見つけていたことを発見しました。ページの上部近くにあり、よく調べてみると、欠落していた入力要素に閉じ山括弧が欠落していることがわかりました。したがって、どうやら WebAii はそれを入力要素として見つけられませんでしたが、javascript は見つけました。したがって、私のテストが「maintDetails.Click()」と言ったとき、それは「document.GetElementsByTag('input')[20].click()」のようなものに変換されていましたが、要素が欠落しているため、 "document.GetElementsByTag('input')[21].click()". そして、見つかった入力要素と、ページのビュー ソースを見て識別できるものとの照合を開始しました。私は、WebAii がリストしていないものを見つけていたことを発見しました。ページの上部近くにあり、よく調べてみると、欠落していた入力要素に閉じ山括弧が欠落していることがわかりました。したがって、どうやら WebAii はそれを入力要素として見つけられませんでしたが、javascript は見つけました。したがって、私のテストが「maintDetails.Click()」と言ったとき、それは「document.GetElementsByTag('input')[20].click()」のようなものに変換されていましたが、要素が欠落しているため、 "document.GetElementsByTag('input')[21].click()". そして、見つかった入力要素と、ページのビュー ソースを見て識別できるものとの照合を開始しました。私は、WebAii がリストしていないものを見つけていたことを発見しました。ページの上部近くにあり、よく調べてみると、欠落していた入力要素に閉じ山括弧が欠落していることがわかりました。したがって、どうやら WebAii はそれを入力要素として見つけられませんでしたが、javascript は見つけました。したがって、私のテストが「maintDetails.Click()」と言ったとき、それは「document.GetElementsByTag('input')[20].click()」のようなものに変換されていましたが、要素が欠落しているため、 "document.GetElementsByTag('input')[21].click()". 私は、WebAii がリストしていないものを見つけていたことを発見しました。ページの上部近くにあり、よく調べてみると、欠落していた入力要素に閉じ山括弧が欠落していることがわかりました。したがって、どうやら WebAii はそれを入力要素として見つけられませんでしたが、javascript は見つけました。したがって、私のテストが「maintDetails.Click()」と言ったとき、それは「document.GetElementsByTag('input')[20].click()」のようなものに変換されていましたが、要素が欠落しているため、 "document.GetElementsByTag('input')[21].click()". 私は、WebAii がリストしていないものを見つけていたことを発見しました。ページの上部近くにあり、よく調べてみると、欠落していた入力要素に閉じ山括弧が欠落していることがわかりました。したがって、どうやら WebAii はそれを入力要素として見つけられませんでしたが、javascript は見つけました。したがって、私のテストが「maintDetails.Click()」と言ったとき、それは「document.GetElementsByTag('input')[20].click()」のようなものに変換されていましたが、要素が欠落しているため、 "document.GetElementsByTag('input')[21].click()".

サイトのソース コードに欠けていた閉じ山かっこを修正し、テストを実行しました。

于 2010-07-01T20:12:08.477 に答える