2

トップ レベルの Web ドライバー API がページ読み込みイベント ハンドラーへのアクセスを提供しないことは理解していますが、(REST インターフェースを介してサーバーにコマンドを直接送信することを含めて) セレン サーバーに直接呼び出して強制する方法はありますか?ページ読み込みブロックの動作? 要素のハックを待つことは知っていますが、可能であればソースに直接アクセスしたいと思います。私が抱えている特定の問題は、ボタンがクリックされたときにJS呼び出しを行い、バックエンドプロセスが発生しているときにページにモーダルダイアログを表示し、バックエンドの作業が完了するとブラウザを新しいページに転送するページです。クリックアクションは新しいページを直接トリガーしないため、セレンはイベントでブロックしません (とにかく、すべての場合にそれを望んでいません)。

Command クラスを調べて有望なコマンドを探しましたが、何も見つかりませんでした。http://code.google.com/p/selenium/wiki/JsonWireProtocolを見つけましたが、どちらも役に立ちませんでした...

4

1 に答える 1

1

それはトリッキーなものです。

selenium/webdriver で http ステータスにアクセスするのはあまり便利ではありません。実用的な方法をお勧めします。IMO要素のアプローチを待つことはハックではなく、それを行う適切な方法です。あなたの場合、selenium.getLocation() または webdriver.getCurrentUrl() に期待値が含まれるのを待ちます。

このようなもの:

webDriverWait.until(new Function<WebDriver, WebElement>() {
    @Override
    public WebElement apply(WebDriver driver) {
        //TODO: pass expected url as parameter
        boolean expectedUrl = driver.getCurrentUrl().contains("your redirect url");
        if (expectedUrl) {
            //If not null is returned, we have found something and waitUntil stops
            return new RemoteWebElement();
        }
        //try again
        return null;
    }
});
于 2012-07-25T12:13:24.303 に答える