2012-07-18 65 views
13

我正在努力以BDD的方式生活。我正在使用Cucumber(使用Selenium),並且正好在我的應用程序中使用了Twitter Bootstrap模式。建議讓Selenium和Bootstrap modal fade一起玩嗎?

在運行Cucumber測試時,出現"Selenium::WebDriver::Error::MoveTargetOutOfBoundsError"錯誤。經過大量搜索,調試和絕望之後,我得出結論:它與我的Bootstrap模塊中使用"fade"參數有關。如果我使用"fade",錯誤被拋出:

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

如果我刪除"fade",然後硒是充滿幸福和我的測試中明確:

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

所以,我現在從我的各種去除"fade"情態動詞。但是,這讓我難過,因爲我喜歡淡入淡出的效果。

是否有其他人遇到過使用Selenium在Bootstrap模式中淡入淡出的問題?如果是這樣,是否有一些巧妙的方法讓兩者很好地合作?順便說一句(不知道它是否重要),我是Rails 3.2.3,Firefox 13.0.1和Ubuntu 12.04LTS。

+0

我也遇到了同樣的錯誤,利用基金會Zurb了'reveal.js'並感謝你的建議,我把它通過刪除'fade'動畫工作。但我沒有找到真正的解決方案。非常有興趣聽到其他人如何解決這個問題 – nathanvda 2012-09-12 22:20:42

+0

何時發生錯誤? – spinningarrow 2012-10-15 10:56:21

回答

-1

放入一個標記,以便在測試環境中它不會褪色,但它在每個其他環境中都會有效。

8

我做了一個快速測試,插入一個WebDriverWait,看看模態的不透明度。它似乎工作,但時間會告訴(至少對我而言)這是一個間歇性問題。這是我在Java中的實現。

Command: pause/
Target: 1000/
Value: (leave empty) 
+0

Chrome驅動程序的[ticket](https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/2766)表明您擁有它的權利。用這麼多的話說,它說一個元素必須停止動畫,然後才能點擊它。 – jpaugh 2016-06-17 14:50:34

-1

在當應用程序打開的引導模態硒測試條件下,您的情態的內容交互前添加一個暫停命令詢問硒暫停一秒(使用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)); 
    } 
} 
2

我解決了它這樣的:

//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"); 
     } 
    } 
); 
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

0

改善user1965252的答案,這對我有用。只需用您的模式div id替換the-modal-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) 
));