1

私は Test::WWW::Selenium を使って書かれたたくさんのテスト スクリプトを持っています (しかし、私が perl を使ったという事実は取るに足らないものであり、Selenium がサポートする言語にはおそらく私が説明した問題があります)。アプリケーションの歯車が外れたら、Selenium IDE を使用してテストを再生し、アクションを完全に制御できるようにしたいと考えています。

しかし、テスト スクリプトからセレン IDE に戻る方法がわかりません。perl を IDE に貼り付けて、「HTML」(別名、内部セレン言語、別名セレン) に変換することはできません。残念ながら、それを取り出すのは簡単でした。

RemoteRunner にはコマンド履歴があり、これを直接コピーして Selenium ide に貼り付けることができます。これは素晴らしいことですが、履歴ボックスには 5 ~ 6 行しか保持されず、自動的にクリアされます。だからそれは私を罵倒し、役に立たない。

では、これらをより効果的に記録するにはどうすればよいでしょうか。Selenium rc のログ オプション (-browserSideLog、-log) は、この点では役に立たないようです。その RemoteRunner.html を見つけてハッキングすることを考えているので、おそらくそのリストはクリアされませんが、別の方法はありますか?

4

2 に答える 2

4

あまり一般的ではないようですが、非常に興味深い作業です。標準的な方法はないと思うので、何かを実装する必要があります。

私はPerlをあまり知らず、Javaを使用しているので、これは単なる注意事項です。

実行されたすべてのコマンドをログに記録DefaultSeleniumするextendedを使用するテストのクラスを拡張します。HttpCommandProcessor

import com.thoughtworks.selenium.HttpCommandProcessor;

public class ExtHttpCommandProcessor extends HttpCommandProcessor {

    public ExtHttpCommandProcessor(String serverHost, int serverPort,
            String browserStartCommand, String browserURL) {
        super(serverHost, serverPort, browserStartCommand, browserURL);
    }

    public String doCommand(String commandName, String[] args) {
        StringBuffer sb = new StringBuffer();

        sb.append("|" + commandName + "|");     

        if (args!=null) {
            for (String arg : args) {
                sb.append(arg + "|");
            }

            if (args.length<2) {
                sb.append(" |");
            }
        } else {
            sb.append(" | |");
        }

        System.out.println(sb.toString());
        // or log it where you want

        return super.doCommand(commandName, args);
    }

}

import com.thoughtworks.selenium.DefaultSelenium;

public class ExtSelenium extends DefaultSelenium {
    public ExtSelenium(String serverHost, int serverPort,
            String browserStartCommand, String browserURL) {
        super(new ExtHttpCommandProcessor(serverHost, serverPort, browserStartCommand, browserURL));
    }
}

SeleneseTestCase次に、テストのベースとして使用するために拡張します。

インポートcom.thoughtworks.selenium.SeleneseTestCase;

public class ExSeleneseTestCase  extends SeleneseTestCase {    

    public void setUp(String url, String browserString) throws Exception {
        int port = 4444;
        if (url==null) {
            url = "http://localhost:" + port;
        }
        selenium = new ExtSelenium("localhost", port, browserString, url);
        selenium.start();
        selenium.setContext(this.getClass().getSimpleName() + "." + getName());
    }

}

このようなテストの出力は次のようになります。

| getNewBrowserSession | * iexplore | http:// localhost:8080 / |
| setContext | SimpleTest.testNew | |
| open | /webapp/test.html | |
|isTextPresent|サンプルテキスト| |
|クリック|sampleLink| |
| waitForPageToLoad | 10000 | |
| testComplete | | |

このソリューションはverifysとassertsをログに記録しないため、ExSeleneseTestCaseでオーバーライドして、トレースを生成することもできます。

于 2010-07-22T10:14:18.237 に答える
1

別の方法もあり、おそらく簡単です: 生成時に (部分的な) selenese HTML ファイルを保存し、perl/java/... コードからファイルを解析し、doCommandを使用して行を実行します。そうすれば、そもそも失われていないため、asserts/verify ステートメントを再構築する必要はありません。

于 2010-11-17T19:43:19.843 に答える