質問

Selenium を実行したことのある人々からの意見が欲しかっただけです (http://selenium.openqa.org) 私は WaTiN で多くの経験を積んでおり、WaTiN 用のレコーディング スイートも書きました。私はそれをうまく構造化したコードを生成させましたが、私だけがメンテナンスしているため、私の会社はそれをほとんど放棄したようです。Selenium を実行したことがある場合、多くの成功を収めましたか?.NET 3.5 を使用する予定ですが、Selenium はうまく動作しますか?生成されたコードはクリーンなものですか、それともすべてのインタラクションの単なるリストですか?(http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx) 分散テスト スイートはどの程度公正ですか?

システムに関するその他のご不満やお褒めの言葉をいただければ幸いです。

役に立ちましたか?

解決

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

優れた Selenium コードを実現する良い方法は、 ページオブジェクトパターン コードがナビゲーション フローを表す方法で。これは私が見た良い例です コーディング道場フロリパ (ブラジルから):

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);
    }
}

お役に立てれば幸いです

他のヒント

私は ASP.Net アプリをテストするために Selenium Remote Control を使用しています (これも同様にターゲットにしていると想定しています)。これはうまく機能します。

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

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

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

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

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

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

現在、Selenium Remote Control を Ruby ドライバーとともに使用しているので、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 解析です。Safari/Firefox は空白とコメント ノードを無視しますが、Internet Explorer は無視しないため、JavaScript の childNodes は信頼できません。Internet Explorer の XPath は、SF/FF よりも 10 ~ 20 倍遅くなります。innerHTML は IE では必ずしも信頼できるとは限りません。

Selenium は非常に優れたツールですが、注意すべき点がいくつかあります。

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

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

  • テストケースのメンテナンス。Selenium テストと良好なカバレッジに多大な労力が費やされたケースを見てきました。その後、テストを作成した人が他のタスクで忙しく、他の誰もテストに触れようとしなかったため、テストは失敗し始めました。しかし、これは Selenium ではなく管理側の問題でした。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top