-1

Selenium IDE で簡単なテストを行い、それを Webdriver でサポートされた JUnit テストとしてエクスポートしました。ページにすべての要素が存在する場合は正常に機能します。Selenium がロケーターを見つけられなかった場合に何が起こるかを確認するために、いくつかのロケーターを変更し、奇妙な問題を見つけました。

例 1:

selenium.click("link=Something");

「何か」が存在しないため、テストは数秒以内に停止し、「com.thoughtworks.selenium.SeleniumException: Element link=Something not found」という例外が表示されます。

例 2:

selenium.click("//div[2]/inprut");

明らかにロケータがページ上で見つかりません (タイプミスのため) が、テストは失敗せず、単にこの行で止まっているだけです。

おそらくこれはばかげた質問ですが、click() 関数 (XPath ロケーターで使用される) を例 1 のように動作させることは可能ですか? 私はSeleniumの初心者なので、どんな助けでも大歓迎です。

4

1 に答える 1

0

コードにバッキング ロジックを追加することをお勧めします。通常extend、クラスをいくつかのTestScriptクラスまたは何かにすることができますが、より深く、次のような関数を実装できます

public String getElement(String element) {
    try {
        if (isElementPresent(element)) return element;

        Integer timesIterated = 0;
        logInfo("Attempting to find element: [" + element + "]");

        for (timesIterated = 0; timesIterated < maxAttempts; timesIterated++) {
            if (isElementPresent(element)) {
                if (!isVisible(element)) logInfo("WARNING: [" + element + "] is not visible!");

                logStatus("Found");

                selenium.highlight(element);
                break;
            } else {
                Integer t = timesIterated + 1;
                logInfo(t.toString() + "/" + maxAttempts);
                if (timesIterated >= maxAttempts) logTestResult("Could not find [" + element + "]", false);
            }

            sleep(2);
        }

    } catch (Exception x) {
        logError(x.getMessage());
        end();
    }

    return element;
}

これは非常に恣意的であり、私が言及する機能は存在しないことに注意してください。それらを自分で実装する必要があります。これは、要素を見つけるために使用するフレームワークからの実際のコードのスニペットです。そうでない場合は、エラーがログに記録され、スクリプトが失敗します。

編集:これはあなたの質問に関連しています。私のisElementPresent(String)関数はxpathとcssの両方で機能するためです...したがって、どのセレクターを提供しても機能します。したがって、isElementPresent(String)関数では、両方のセレクターをサポートするロジックを実装します。

于 2013-01-04T13:10:05.210 に答える