我正在使用Cucumber (带有Selenium),并且恰好在我的应用程序中使用了Twitter Bootstrap modals。
在运行黄瓜测试时,我得到了一个"Selenium::WebDriver::Error::MoveTargetOutOfBoundsError"
错误。经过多次搜索、调试和普遍的绝望,我得出结论,这与我的Bootstrap modals中"fade"
参数的使用有关。如果我使用"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 modals中使用Selenium和fade时遇到过问题?如果是这样的话,有没有什么聪明的方法可以让两者很好地合作呢?
顺便说一下(不确定这是否重要),我是Rails 3.2.3、Firefox 13.0.1和Ubuntu 12.04LTS。
发布于 2013-01-10 09:54:55
我做了一个快速测试,插入了一个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");
}
}
);
发布于 2016-03-08 23:18:41
我用这种方式(使用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));
}
}
发布于 2012-12-15 12:27:05
添加一个标志,这样在测试环境中它就不会褪色,但在其他所有环境中都会褪色。
https://stackoverflow.com/questions/11546217
复制相似问题