建议得到硒发挥自举模式褪色很好吗?(Suggestions for getting Selenium

2019-07-30 12:05发布

我工作居住生活的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。

Answer 1:

我做了一个快速测试与插入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");
        }
    }
);


Answer 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));
    }
}


Answer 3:

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 “模式-背景”的。



Answer 4:

提高对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)
));


Answer 5:

我通常做的是断言对某些内容(当它淡出或不可见),应该是在模态可见:

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')


Answer 6:

放在一个标志,以便在测试环境中它不褪色,但它在所有其他环境中一样。



Answer 7:

在当应用程序打开的引导模态硒的测试情况下,添加一个暂停命令询问硒与模式的内容交互之前暂停一秒:

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


文章来源: Suggestions for getting Selenium to play nice with Bootstrap modal fade?