13

私はBDDの方法で生活するために働いています。私はCucumber(Seleniumを使用)を使用しており、アプリケーションでTwitterBootstrapモーダルを使用しています。

Cucumberテストの実行中に、"Selenium::WebDriver::Error::MoveTargetOutOfBoundsError"エラーが発生していました。"fade"多くの検索、デバッグ、および一般的な絶望の後、私はそれが私のBootstrapモーダルでのパラメーターの使用に関係していると結論付けました。を使用する"fade"と、エラーがスローされます。

<div class="modal hide fade" id="info-share-edit-modal" style="display: none;">
  .
  .
  .
</div>

を削除する"fade"と、Seleniumは幸せに満ち、私のテストは明確になります。

<div class="modal hide" id="info-share-edit-modal" style="display: none;">
  .
  .
  .
</div>

それで、私は今"fade"、私のさまざまなモーダルから削除しています。しかし、私はフェード効果が好きなので、これは私を悲しくさせます。

BootstrapモーダルでフェードインするSeleniumの使用で問題が発生した人は他にいますか?もしそうなら、2つをうまく連携させるための賢い方法はありますか?

ちなみに(それが重要かどうかはわかりませんが)、私はRails 3.2.3、Firefox 13.0.1、Ubuntu12.04LTSです。

4

7 に答える 7

8

モーダルの不透明度を確認する WebDriverWait を挿入して簡単なテストを行いました。うまくいくようですが、(少なくとも私にとっては)断続的な問題であるため、時間が経てばわかります。これが私のJavaでの実装です。

//Ensure the modal is done animating
new WebDriverWait(driver, 5).until(
    new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver webDriver) {         
            return webDriver.findElement(By.id("videoModal")).getCssValue("opacity").equals("1");
        }
    }
);
于 2013-01-10T01:54:55.113 に答える
2

この方法で解決しました(C#を使用)。高速で、一度も失敗していません。

public static void WaitForModal(this RemoteWebDriver driver)
{
    using (driver.NoImplicitWait())
    {
        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
        wait.Until(d => d.FindElements(By.ClassName("modal-backdrop").Count == 0);
    }
}

NoImplicitWait は、ドライバーの暗黙的な待機を一時的に無効にするために使用されます。

public static NoImplicitWait NoImplicitWait(this IWebDriver driver)
{
    return new NoImplicitWait(driver);
}

public sealed class NoImplicitWait : IDisposable
{
    private readonly IWebDriver _driver;

    public NoImplicitWait(IWebDriver driver)
    {
        _driver = driver;
        _driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(0));
    }

    public void Dispose()
    {
        _driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));
    }
}
于 2016-03-08T15:18:40.980 に答える
0

c# コード

私は同じ問題を抱えていましたが、このコードは2か月以上機能しており、クラッシュすることはありません。

 public static void WaitForModal(this IWebDriver driver)
    {
        wait.Until<IWebDriver>((d) =>
        {
            if (driver.FindElements(By.ClassName("modal-backdrop")).Count == 0)
            {
                return driver;
            }
            return null;
        });
    }

「モーダル背景」IWebElementを持つものがなくなるまで待機します。class

于 2017-01-03T16:36:54.230 に答える
0

テスト環境ではフェードしないようにフラグを設定しますが、他のすべての環境ではフェードします。

于 2012-12-15T04:27:04.893 に答える
0

user1965252 の回答を改善すると、これでうまくいきました。the-modal-idモーダル div idに置き換えるだけです。

new WebDriverWait(driver, TIME_OUT_IN_SECONDS).until(and(
        new ExpectedCondition<Boolean>() {
           @Override
           public Boolean apply(WebDriver webDriver) {
               return webDriver.findElement(id("the-modal-id"))
                       .getCssValue("opacity").equals("0");
           }
        },
        numberOfElementsToBe(cssSelector("div.modal-backdrop"), 0)
));
于 2017-07-25T23:18:05.323 に答える
-1

アプリケーションがブートストラップ モーダルを開くときの Selenium テスト ケースで、一時停止コマンドを追加して、モーダルのコンテンツと対話する前に 1 秒間一時停止するように Selenium に要求します。

Command: pause /
Target: 1000 /
Value: (leave empty)
于 2013-02-22T07:53:05.130 に答える