0

以前は Selenium IDE を使用し、Firefox でのみテストを実行していたので、Selenium RC は初めてです。Eclipse を介して Selenium RC を使用して基本的なテストを実行しようとしています。私のテストは Firefox では正常に動作し、Safari ではポップアップ ブロッカーを強制終了しましたが、IE8 によって SeleniumException がスローされ、403 応答の「XHR ERROR」が含まれています。

com.thoughtworks.selenium.SeleniumException: XHR ERROR: URL = http://localhost:8080/pims Response_Code = 403 Error_Message = Forbidden
    at com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java:97)
    at com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java:91)
    at com.thoughtworks.selenium.DefaultSelenium.open(DefaultSelenium.java:335)
    at org.pimslims.seleniumtest.FirstTest.testNew(FirstTest.java:32)
    ...

http:///localhost:8080 で同様のテストを行うことができます (SO は私がスパム行為を行っていると考えているため、スラッシュの間にスペースを入れてください)。このエラーが表示されるのは、http:///localhost:8080/pims でアプリケーションを開こうとした場合だけです。IE でのみです。その URL をアドレス バーに入力して、IE で開くことができます。

これを引き起こしているIEの設定があると確信していましたが、考えられることはすべて試しました。http:// /localhost:8080 は信頼済みサイトにあり、そのゾーンのセキュリティを最小限に下げ、ポップアップに関連するものをすべて許可しました. http:// /localhost:8080/ を追加しようとするとpims/ を Trusted Sites に追加すると、IE は既にそこにあると言います。

また、プロキシ設定をいじりましたが、役に立ちませんでしたが、明らかなものを見落としている可能性があります。

*iexplore、*iehta、および *iexploreproxy でテストを開始しようとしましたが、すべて同じように動作します。

見逃したものはありますか?

参考までに、ここに私のテスト ケースを示します。これは Firefox でそのまま動作し、PIMS アプリケーションのインデックス ページを開いてリンクをクリックします。

public class FirstTest extends SeleneseTestCase {
    @Override
    public void setUp() throws Exception {
        this.setUp("http://localhost:8080/", "*firefox");
    }

    public void testNew() throws Exception {
        final Selenium s = this.selenium;
        s.open("/pims");
        s.click("logInOutLink");
        s.waitForPageToLoad("30000");
    }
}

どんな助けでも大歓迎です!

4

2 に答える 2

1

これは驚くべきことであり、「不潔なハック」のように感じられますが、それが答えかもしれません。

Tomcat ルートを指すようにテストを設定します。

this.setUp("http://localhost:8080/", "*iexplore");

Selenium-RC がアプリケーションを直接開くのではなく、Tomcat Manager 経由でアプリケーションに移動するようにします。

/*
 * This works
 */
public void testFromRoot() throws Exception {
    final Selenium s = this.selenium;
    s.open("/");
    s.click("link=Tomcat Manager");
    s.waitForPageToLoad("30000");
    s.click("link=/pims");
    s.waitForPageToLoad("30000");
    s.click("link=User Help");
    s.waitForPageToLoad("30000");
    s.click("logInOutLink");
    s.waitForPageToLoad("30000");
}

/*
 * This doesn't
 */
public void testNew() throws Exception {
    final Selenium s = this.selenium;
    s.open("/pims"); // <<<<<<<<<<<<<< Test fails here with exception, 403 error
    s.click("link=User Help");
    s.waitForPageToLoad("30000");
    s.click("logInOutLink");
    s.waitForPageToLoad("30000");
}

これを追求し続けますが、希望が持てそうです。なぜこれが機能するのかについて誰かが洞察を持っていれば、それが正しい答えであることにもっと自信を持っていると思います. これと IE 独自のセキュリティ設定 (私は 1 週間ずっといじっていました) の組み合わせが原因で動作している可能性もあります。

プラン B は IE8 から IE7 に戻すことですが (8 ではより厳密なクロスドメイン制御を考えています)、それは避けたいと思っています。

于 2010-05-14T10:03:30.353 に答える
0

Tomcat Manager へのログインを必要としない、わずかに優れたソリューション:

s.open("/");
s.getEval("window.document.body.innerHTML='<a href=\"/pims\">Link to PIMS<\\/a>'");
s.click("link=Link to PIMS");

これにより、Tomcat ルート ページが開き、本文全体がアプリケーションへのリンクに置き換えられ、そのリンクがクリックされます。

それは醜いですが、うまくいきます。

于 2010-05-17T15:47:36.780 に答える