3

Selenium WebDriverを使用してWebアプリケーションをテストしていますが、要素が存在するか表示されるかを確認するための適切な方法はどれか疑問に思いました。私は通常、すべての要素がページに存在すると主張しますが、非表示の要素もチェックします。この場合、何らかのアクションが実行されたときにのみ要素が表示されるかどうかもチェックする必要があります。たとえば、リンクをクリックすると、他のフィールドとラベルが表示されますが、以前は非表示でした。この場合、要素が存在するかどうかと、他の要素がクリックされる前後に要素が表示されているかどうかの両方を確認する必要があります。

私はこれを行うための適切な方法はどれかと思っていました。ページ上のすべての要素をチェックするのは多すぎますか(ページにいくつかのボタン、テキストフィールド、ラベル、リンクなどがあると仮定します)?

議論の目的で、いくつかのコードスニペットを含めたいと思います。要素がページに存在することを確認するには、次のスニペットを使用します。

public boolean isElementPresent(By by) {
    try {
        driver.findElement(by);
        return true;
    } catch (NoSuchElementException e) {
        return false;
    }
}

要素が表示されているかどうかを確認するには、次のスニペットを使用します。

public boolean isElementDisplay(By by) {
    if (driver.findElement(by).isDisplayed()) {
        return true;
    } else
        return false;
}

このアプリケーションをテストする目的の1つは、要素が存在し、正しく表示されているかどうかを確認することです。私はここで正しいことをしていますか?あなたの視点を教えてください。私は最近SeleniumWebDriverを使い始めましたが、これを行うのは私の会社で唯一の人です...私には頼る人がいません。どんな答えでも大歓迎です。

4

5 に答える 5

3

そもそも存在しない要素で「checkIfDisplayed」メソッドを呼び出す場合を除いて、問題はありません。例外がスローされます。これを次のように変更します。

public boolean checkIfDisplayed(By by) {
    if (isElementPresent(by) {
    if (driver.findElement(by).isDisplayed()) {
        return true;
    } else
        return false;
    } else
        return false;
}

(これはコンパイルできるコードではないかもしれません。私は C# の人間ですが、私の言いたいことがわかるはずです)

わずかなパフォーマンス ヒットが発生する可能性がありますが、全体として、実行していることはまったく問題ありません。

于 2012-09-06T08:48:40.720 に答える
2

要素の存在を確認するには、むしろ使用します

public boolean isElementPresent(By by)
{
   return driver.findElements(by).size() > 0
}

checkIfDisplayed 関数の背後にあるアイデアがよくわかりません。新しい機能を追加せずに、WebElemet の isDisplayed() メソッドによって返された結果を返します...

編集

これまでのところ、Arran が最良の回答を提供しました。少し変更するだけです:

public boolean checkIfDisplayed(By by)
{
   List<WebElemet> elements = driver.findElements(by);
   return ((elements.size() > 0) && (elements[0].isDisplayed()));
}

ただし、isElementPresent と isDisplayed を別々に呼び出す方がよいと思います。このようにして、テストが失敗した理由を知ることができます (要素の存在または可視性が原因であった場合)。

于 2012-09-05T14:49:49.240 に答える
0

私は同じアプローチを使用します(同じ方法を意味します)。しかし、2 つのことを理解することが重要です。一部の要素は存在する可能性がありますが、表示されません。したがって、要素が存在するかどうかを確認する目的で、メソッドを呼び出すことができます

 public boolean isElementPresent(By locatorKey) {
        try {
            driver.findElement(locatorKey);
            return true;
        } catch (NoSuchElementException e) {
            return false;
        }

しかし、isElementPresent メソッドの欠点は、DOM モデル内の要素がページに表示されず、その結果 webDriver でアクセスできないことを指摘できることです。その場合、追加のチェックが役立ちます。

 driver.findElement(By.xpath(....)).isDisplayed()

物事が今明らかになることを願っています)

于 2012-09-05T15:37:20.673 に答える
0

最初の方法は問題ないようです。

したがって、findElement-call で結果が得られない場合は、2 番目の方法で問題が発生します。

見つかった要素があるかどうかのチェックを追加してから、それが表示されているかどうかを確認する必要があります。

try {
      final WebElement elem = driver.findElement(by);
      elem.isDisplayed();
      return true;
    } catch (NoSuchElementException nse) {
      return false;
    }

また、注意: 複数の要素が by インスタンスによって指定された基準に一致する可能性は無視されます。findElemts() メソッドを参照してください。

于 2012-09-06T09:14:18.760 に答える