1

Watir1.6.7を使用しています。

WatirとCucumberを使用して、PeopleSoftアプリの回帰テストの開発に取り組んでいます。アプリケーションのフォームでいくつかの問題が発生しました。

まず、text_fieldに値を入力すると、ユーザーがtext_fieldの外側をクリックするとページが更新されます。次のtext_field要素が存在するのを待つことは、ページがリロードされる前、またはページが期待どおりにリロードされた後に要素を見つける可能性があるため、問題があります。待機時間を増やすことは、それが「機能する」としても、決して良い解決策のようには感じられません。

2番目の問題は、ユーザーが現在のフィールドの外側をクリックするまでページの更新がトリガーされないことです。この場合、これは、スクリプトが入力される次のtext_fieldにアクセスしようとしたときに発生します。ここでの解決策の1つは、またはキーストロークを送信することですが、このように追加するたびに、スクリプトがより脆弱になるのを感じることができます。

脆弱性が低く、各text_fieldアクションの間に2〜3個の追加コマンドを必要としない他のアプローチはありますか?

実況は次のようになります。

  • ブラウザは、フォームを含むページに移動します。
  • ブラウザが最初のフォームフィールドに入力します。(修正:キーストロークを送信してページを更新し、2番目のフィールドが再び表示されるまでwait_unt)
  • ブラウザは、入力する2番目のフォームフィールドを選択します。(繰り返しますが、keystroke&wait_until)
  • ページが更新され、スクリプトが失敗します。(解決済み)
  • ブラウザは3番目のフォームフィールドを選択します...
4

3 に答える 3

2

アプリケーションが5秒のスリープ時間を超え始めたので、これ以上待機時間を増やしたくありませんでした。「element.set」を文字ごとに入力するのではなく、「element.value="」を使用してテキストフィールドにすばやく入力するとどうなるかを確認したかったのです。

この変更により、すべての合併症が完全に解決されました。テキストを入力するときにページが更新されなくなり、TABまたはENTERを使用して別のフィールドに移動するためにsend_keysステートメントが不要になりました。フィールド間に更新や状態保存がない場合でも、フォームには入力されたすべてのデータが保存されます。

以前の方法:

def enter_text(element, text)
    element.set text
    @browser.send_keys("+{TAB}")
    sleep 5
    Watir:Wait.until { element.exists? }
end

新しい方法:

def enter_text(element, text)
    element.value = text
end
于 2011-03-01T15:59:39.697 に答える
1

まず、ここには興味深い待機メソッドがあります。Watir:: Waiter :: wait_untilを使用してChromeを強制的に待機させるにはどうすればよいですか?

全体的に、私はあなたの問題を完全には理解していません。私が理解しているように、あなたのスクリプトは機能しています。いくつかのサンプルソースコードのように、あなたがすでに持っているものと比較してあなたの欲求について少し明確にすることができれば、それは助けになるでしょう。

カスタム待機に関するアイデアを探している場合は、ページ、フォーム、またはテキストフィールドのHTMLの変更を確認できます。テキストフィールドが.visible?であることを確認できます。次のtext_fieldにアクセスして(クリックするか、値を設定するなど)、text_fieldが見つからない場合は例外をキャッチし、壊れなくなるまで再試行します。これにより、両方の問題が同時に解決されます。

現在のフィールドの外側をクリックすることが悪い解決策になるのはなぜですか?text_fieldアクセスになるために、次のステップが絶対に必要ですか?現在のフィールドの外側をクリックしたときにのみ次のフィールドがどのように存在するかについては頭を悩ませていませんが、次のフィールドにアクセスすることでこの更新を引き起こします。

編集:大歓迎です、そしてそれを片付けてくれてありがとう、私は今よりよく理解していると思います。Watirがページ待機を呼び出すことを許可するか、強制的に実行する場合、Watirは更新を待機し、新しいtext_fieldを見つけることができます。キーストロークはie.waitを呼び出さないため、1つのキーストロークを送信してから待機を呼び出すと、スクリプトの残りの部分が更新後の状態に応答します。

Watirで待つ際のOpenQAページを強くお勧めします。更新を呼び出すために行っていることがWatirページ待機を呼び出すもののリストに表示されない場合は、独自のページ待機を呼び出す必要があります...ただし、ページが更新される前に行う必要があるため、更新は、更新自体が終了する前に終了する必要があります。

于 2011-02-09T11:43:46.793 に答える
1

これを知るのに十分なPeoplesoftのアプリはわかりませんが、アプリは処理中にユーザーに何かを表示しますか?終わった?

これを行うアプリを見たことがありますが、アイテムはアニメーションGIFまたはpngであり、グラフィックを含むdivの可視性属性を変更することで表示されます。その場合、.visible?を使用して、アプリがまだ読み込まれているかどうかを確認できます。その要素のメソッドとそれがまだそこにある場合はしばらく眠っています。

私がテストしているアプリ(これらの「アイコン」の1つを持っている)のために、私はsleepwhileloadingと呼ばれる簡単なメソッドを作成しました。実行するのは、ロードアイコンが表示されているかどうかを確認するwhileループにラップされた1秒間のスリープを使用することだけです。チャームのように機能します

于 2011-02-25T05:14:53.330 に答える