2

Seleniumでファイルアップロードタスクを使用しています。

ここでの問題は、ファイルをアップロードするのに5〜10秒かかることです。ただし、Seleniumサーバーが完全にアップロードされるまで停止する必要があります。

これがいくつかのサンプルコードです。

selenium.type("id=Fileuploader","c:\\mypic.jpg");
selenium.click("id=submmit");

ファイルが完全にアップロードされるのを待たずにステートメントselenium.clickがステートメントの直後に実行されているため、エラーが発生しています。selenium.type

では、Seleniumサーバーを停止するためにここで何を使用する必要がありますか(サーバーはしばらく待機する必要があります)?

4

3 に答える 3

3

非同期リクエストは常に追跡が困難です。ファイルのアップロード時にページに変更が必要なため、それを探して待ちます。

waitForCondition()を試すことができます。

またはある種のisElementPresent()マジック

final int TIMEOUT = 10000;  // ten seconds
long targetTime = System.currentTimeInMillis() + TIMEOUT;
while((System.currentTimeInMillis() < targetTime)) {
    if (selenium.isElementPresent("xpath=something")) {
        break;
    }
}

編集:新しい要素がない場合は、少なくとも何らかの変更が必要です。たとえば、非同期アップロードvalueで非表示のinput要素が変更された場合は、getValue()を使用してテストするか、スマートロケーターを使用してテストできます。

isElementPresent("xpath=//input[@type='hidden' and contains(@value,'mypic.jpg')]");

EDIT2:アップロード前でもチェック対象の要素(この場合は画像プレビュー)が存在する場合、それは表示されていなかったため、isVisible()でテストできます。

于 2012-04-12T12:34:51.270 に答える
1

最悪の場合Thread.sleep()、コードでいつでも使用できます。しかし、最善の方法は、高度な使用法を確認することです-明示的および暗黙的な待機

于 2012-04-12T10:52:15.957 に答える
0

ファイルをアップロードした後、アップロードされた要素のプレビューを表示する新しい要素が表示されます。

だから、私は使用しました

selenium.isVisible("xpath of new preview element") 

ループに入れます。それが動作します。

ありがとうございました。

于 2012-04-13T10:14:38.430 に答える