我工作居住生活的BDD方式。 我使用的是黄瓜(硒)和发生在我的应用程序中使用Twitter的引导模态是。
在运行测试黄瓜,我得到一个"Selenium::WebDriver::Error::MoveTargetOutOfBoundsError"
错误。 一番搜索,调试和一般的绝望后,我的结论是,它具有与使用做"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在引导模态褪色有其他人遇到的问题? 如果是这样,有得到这两个很好地协同工作的一些巧妙的方式?
顺便说(不知道它的问题),我的Rails 3.2.3,火狐13.0.1和Ubuntu 12.04LTS。
我做了一个快速测试与插入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");
}
}
);
我解决了它这种方式(使用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));
}
}
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
“模式-背景”的。
提高对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)
));
我通常做的是断言对某些内容(当它淡出或不可见),应该是在模态可见:
expect(page).to have_content('My Modal Header')
expect(page).to have_no_content('My Modal Header')
利用这一点很重要.to have_no_content
而不是.not_to have_content
,如have_no_content
将等待一段时间的事情是真实的。
在紧要关头,你还可以检查模式CSS选择器。 引导增加了一个in
上课的时候语气是可见的:
expect(page).to have_selector('.modal.in')
expect(page).to have_no_selector('.modal.in')
放在一个标志,以便在测试环境中它不褪色,但它在所有其他环境中一样。
在当应用程序打开的引导模态硒的测试情况下,添加一个暂停命令询问硒与模式的内容交互之前暂停一秒:
Command: pause /
Target: 1000 /
Value: (leave empty)