0

そのため、Javaには、Selenium2.25.0で提供されたUnexpectedAlertBehaviour機能を使用して予期しないアラートを処理する機能があることに気付きました。CHANGELOGが表示されます。アラートがいつポップアップするかを常に予測できるとは限らないため、アラートを常に受け​​入れてスクリプトを続行すると便利です。

Drupalのctoolsを使用してコーディングを行い、それがajaxフレームワークである場合、その理由を理解できます... Seleniumは、ajax呼び出しを完了するには速すぎることがあり、ctoolsは、ajax呼び出しが完了しなかった理由のエラーを説明するダイアログをスローします。 。

最後に、WebdriverのREST API(ミンクのWebDriverの派生元)を使用してこの機能を実行することも可能ですか?誰かがミンクまたはミンクを使用して(yamlまたはphpコードを介して)behatを介してそれを設定する方法を知っていますか?

4

2 に答える 2

2

このステップ定義で機能を実行するときにアラートを無効にするために、いくつかのjsを追加することができます

/**
 * @When /^I disable the alerts$/
 */
public function iDisableTheAlerts()
{
   $javascript = <<<JS
       window.alert = function() {}; 
   JS;       
   $this->getSession()->executeScript($javascript);
}

これは事実上、アラート機能をオーバーライドし、nullリターンを実行して、jsが実行を継続するようにします。

ブラウザによっては、これが機能しない場合は、さまざまな方法でオーバーライドすることをお勧めします。

アラートをbehatから注入するのではなく、アプリで完全に無効にすることもできますが、それでもアラートはある種の...咳咳...「設計上望ましい機能」として保持されます。

于 2013-01-08T04:28:34.653 に答える
0

私はPHP用のSeleniumを使用していますが、これが私の実用的なソリューションです。

try {
    // actions to open alert
} catch (UnexpectedAlertOpenException $e) {
    if ($i->isWebDriver()) {
        $i->executeInSelenium(function (\RemoteWebDriver $webDriver) {
            $webDriver->switchTo()->alert()->dismiss();
        });
    }
}
于 2015-12-29T17:02:54.260 に答える