16

Selenium ( http://selenium.openqa.org ) を実行したことのある人からの意見が欲しかっただけです。よく構造化されたコードを作成しましたが、私だけが保守しているため、私の会社はそれをほとんど放棄したようです。

セレンを実行したことがある場合、多くの成功を収めましたか?

.NET 3.5 を使用しますが、Selenium は .NET 3.5 でうまく動作しますか?

生成されたコードはクリーンですか、それとも単にすべてのやり取りのリストですか? ( http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx )

分散テスト スイートはどの程度公平ですか?

システムに関する他の不満や賛辞は大歓迎です!

4

5 に答える 5

27

Selenium IDEを使用してコードを生成している場合は、selenium が実行するすべてのアクションのリストを取得するだけです。私にとって、Selenium IDE は、迅速な「試してみる」テストを開始または実行するための優れた方法です。しかし、保守性と読みやすいコードを考えると、独自のコードを作成する必要があります。

適切な Selenium コードを実現する良い方法は、ページ オブジェクト パターンを使用して、コードがナビゲーション フローを表すようにすることです。Coding Dojo Floripa (ブラジルから)で見られる良い例を次に示します。

public class GoogleTest {

    private Selenium selenium;

    @Before
    public void setUp() throws Exception {
            selenium = new DefaultSelenium("localhost", 4444, "*firefox",
                            "http://www.google.com/webhp?hl=en");
            selenium.start();
    }

    @Test
    public void codingDojoShouldBeInFirstPageOfResults() {
            GoogleHomePage home = new GoogleHomePage(selenium);
            GoogleSearchResults searchResults = home.searchFor("coding dojo");
            String firstEntry = searchResults.getResult(0);
            assertEquals("Coding Dojo Wiki: FrontPage", firstEntry);
    }

    @After
    public void tearDown() throws Exception {
            selenium.stop();
    }

}


public class GoogleHomePage {

    private final Selenium selenium;

    public GoogleHomePage(Selenium selenium) {
            this.selenium = selenium;
            this.selenium.open("http://www.google.com/webhp?hl=en");
            if (!"Google".equals(selenium.getTitle())) {
                    throw new IllegalStateException("Not the Google Home Page");
            }
    }

    public GoogleSearchResults searchFor(String string) {
            selenium.type("q", string);
            selenium.click("btnG");
            selenium.waitForPageToLoad("5000");
            return new GoogleSearchResults(string, selenium);
    }
}

public class GoogleSearchResults {

    private final Selenium selenium;

    public GoogleSearchResults(String string, Selenium selenium) {
            this.selenium = selenium;
            if (!(string + " - Google Search").equals(selenium.getTitle())) {
                    throw new IllegalStateException(
                                    "This is not the Google Results Page");
            }
    }

    public String getResult(int i) {
            String nameXPath = "xpath=id('res')/div[1]/div[" + (i + 1) + "]/h2/a";
            return selenium.getText(nameXPath);
    }
}

役立つことを願っています

于 2008-09-19T05:53:30.800 に答える
7

私はASP.NetアプリをテストするためにSelenium Remote Controlを使用しています(これはあなたもターゲットにしていると思います)。

Selenium を使用したことがない場合は、Selenium IDE を使用するためのスクリーンキャストをいくつか見てください。これにより、「Selenium」がどのように機能するかがよくわかります。IDE は Firefox プラグインであり、基本的には簡単な記録再生テストを開発できます。ただし、大規模なテスト スイートの場合、または本当に保守しやすいテストを作成する場合は、Selenium Remote Control をお勧めします。(まだ始めたばかりの場合、IDE は素晴らしいです。)

Selenium Remote Controlを使用すると、好みの言語と単体テスト フレームワークを使用して Web ブラウザーを駆動し、テストを実行できます。C#/NUnit に慣れている場合は、その方法でテストを記述し、好きな NUnit の機能をすべて使用できます。(たとえば、Test-Driven.net プラグイン)。また、テストは高級言語で記述されているため、特定のテスト クラスから継承するなどの操作を実行して、実際のテスト メソッド コードをよりクリーンにすることができます。(または、少なくともそれが私のテストの書き方です。テストメソッドの行数を妥当な数に保つ複雑なシナリオをテストできます。)

あなたは分散テストについて言及しています。残念ながら、NUnit でSelenium Gridプロジェクトを使用する方法が見つかりませんでした。Selenium Grid を使用すると、さまざまなマシンやブラウザー インスタンスでテスト スイートを実行できます。したがって、たとえば 200 のテスト メソッドを次々に (つまり、シリアルに) 実行するのではなく、たとえば 4 つの Grid インスタンス (つまり、一度に 4 つの異なるブラウザー インスタンスで実行) に負荷を分散することができます。どのように配布したいかについて。

ただし、Java または PHP でテストを作成する場合は、うまくいく可能性があります。これは、並列テスト用の pNUnit を含む NUnit2.5 のリリースで NUnit 経由で利用できるようになると期待しています。

セレンについてさらに質問がある場合は、元の質問を明確にしてください。喜んでお手伝いさせていただきます. (Selenium は私が毎日使っているツールの 1 つにすぎないので、新しい人が Selenium を使い始めるのを手伝うのは楽しいです..)

于 2008-09-19T17:35:44.207 に答える
3

私は Selenium IDE と Selenium Core から始めました。これらは間違いなく、始めるための優れたツールです。ただし、Selenium の HTML ベースのコマンドごとの言語である Selenese しか使用できないため、あまり強力ではありません。

現在、Ruby ドライバーで Selenium Remote Control を使用しているため、Ruby が提供する機能を利用できます。Windows 2000、XP、Vista、Mac 10.4/10.5 など、多くの環境をテストしており、該当する環境のそれぞれについて、Safari 2/3、Firefox 2/3、Internet Explorer 6/7 をテストしています。

Selenium は、これらすべての OS およびブラウザーと互換性があると主張していますが、現在 Internet Explorer で問題が発生しています (StackOverflow に関する私の最初の質問は、実際にはそれに関するものです)。しかし、これほど強力で、これほど多くのプラットフォームで動作するツールを他に知りません。

私が Selenium で経験した最大の問題は、DOM の解析です。JavaScript の childNodes は信頼できません。Safari/Firefox は空白とコメント ノードを無視しますが、Internet Explorer は無視しないからです。Internet Explorer の XPath は、SF/FF よりも 10 倍から 20 倍遅くなります。innerHTML は IE では常に信頼できるとは限りません。

于 2008-09-26T19:46:28.817 に答える
1

Seleniumはかなりまともなツールですが、注意すべき点がいくつかあります。

  • Selenium IDEとSeleniumコアは、100%同じ機能を共有していません。たとえば、右クリックはIDEでサポートされていますが、現在のコアリリースではサポートされていません。ただし、リポジトリから新しいバージョンを使用すると、それが解決されます。

  • ext js、gwtなどの場合、自動的に生成された(ランダムな)IDではなく、表示要素に適切なIDがあることを確認してください。

  • テストケースの維持。私は、Seleniumテストと良好なカバレッジに多大な努力が払われたケースを見てきました。その後、テストを作成した人が他のタスクで忙しく、他の誰もそれらに触れたがらなかったため、テストは失敗し始めました。しかし、これはSeleniumではなく、管理上の問題でした。

于 2008-10-17T08:45:58.200 に答える
1

私はセレンの大ファンです。ただし、事前に知っておくとよい重要な落とし穴の 1 つは、Selenium IDE にはポップアップ ウィンドウに関する多くの問題があるということです。これらの問題は Selenium RC では持続しませんが、開発を少し頭痛の種にする可能性があります。

于 2009-07-22T22:21:22.357 に答える