0

この状況に適した ExpectedConditions メソッドを見つけようとしています。チャートがあり、チャートを再ソートした後、各行のテキストを確認したいと考えています。問題は、グラフが更新されたときにテキストがまだ存在し、グレー表示されていることです。ボタンをクリックしてグラフを再ソートし、探しているテキストをすぐに探しても、テキストがまだ変更されていないため、テストは失敗します。グラフが更新されているときに要素がまだ表示されているため、visibilityOfElementLocated を使用できません。要素が変更されるのを待っているだけです。

それが意味をなすかどうかはわかりません!! 説明するのは本当に難しい問題です。

ちょっとした背景: 私は Selenium Java を使用しており、Chrome を使用してテストしています。これまでの私の方法は次のとおりです。それは正常に動作します。sleep ステートメントを使用せずに、グラフが更新されるのに十分な時間プログラムを待機させる方法を理解する必要があります。

みんなありがとう!明確ではないことは承知していますが、説明が必要な場合はお知らせください。

public void Check_for_text_in_column(String text, String row, String column)
{
    By by = By.xpath("//*[@id=\"table_Table_table_ktg\"]/tbody/tr[" + row + "]/td[" + column + "]/div/div/span");
    WebDriverWait wait = new WebDriverWait(getWebDriver(), WAIT_TIME);

    //This is the line that I need to change: 
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

    if(!element.getText().equals(text))
    {
        fail("\nDid not find text: " + text + "\nFound text: " + element.getText() + "\n");
    }
}

乾杯!

4

1 に答える 1

4

交換できます

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

WebElement element = wait.until(ExpectedConditions.textToBePresentInElement(by, text));

編集:

あなたWAIT_TIMEの待ち時間のタイムアウトです。

trueに従ってタイムアウトする前に予期された状態が返されなかった場合はWAIT_TIME、 にelementなりますnull

したがって、小切手は次のようになります。

if(element == null)
{
    fail("\nDid not find text: " + text + "\nFound text: " + element.getText() + "\n");
}

編集:

おそらく、別のオプションは次のようになります。

public void Check_for_text_in_column(String text, String row, String column)
{
    By by = By.xpath("//*[@id=\"table_Table_table_ktg\"]/tbody/tr[" + row + "]/td[" + column + "]/div/div/span");
    WebDriverWait wait = new WebDriverWait(getWebDriver(), WAIT_TIME);

    // your original find
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

    // flag to set when text is found, for exiting loop
    boolean hasText = false;

    // counter for # of times to loop, finally timing out
    int tries = 0;

    // until text is found or loop has executed however many times...
    while (hasText == false && tries < 20) {

        // get the element
        element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

        // if text is not present, wait 250 millis before trying again
        if(!element.getText().equals(text){
            Thread.sleep(250);
            tries++;
        }
        else{
            // text found, so set flag to exit loop
            hasText = true;
        }   
    }


    if(!element.getText().equals(text))
    {
        fail("\nDid not find text: " + text + "\nFound text: " + element.getText() + "\n");
    }
}

あなたがステートメントを望んでいないと言ったのは知っていますがsleep、不必要に長いステートメントを1つも望まないという意味だったと思います。内部でもExpectedConditions使用しています。sleepそれらは、変更のポーリングの間に数ミリ秒間あります-型ラッパーsleepなしで、まさにこれが行うことです。ExpectedCondition

于 2013-06-10T16:00:11.583 に答える