在Angular应用程序的E2E测试中隐式等待

时间:2018-05-21 09:16:24

标签: angular selenium selenium-webdriver e2e-testing

我为Angular 4 / ASP.NET Core Web API应用程序进行了E2E测试(使用Selenium WebDriver)。

我在某些测试中偶尔会遇到超时/等待问题。

E2E框架有一个方法WaitForAngular(),它使用一些Javascript(取自Protractor)等待Angular指示它在继续之前已经加载了所有'testabilities'(参见https://stackoverflow.com/a/39349865/95423

然而,这似乎并不完全可靠,偶尔在运行中我们最终会无限期等待。

我们使用的另一种方法是隐式等待呈现的元素:

var url = "targetURL"
Driver.Instance.Navigate().GoToUrl(url);

var waitSeconds = 15;
var navWait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(waitSeconds))
{
    Message = $"The targetURL failed to load in {waitSeconds} seconds"
};

navWait.Until(x => x.FindElementById(targetUrlId) != null || x.FindElementById(forbiddenId) != null);

我从第二种方法看到了更强大的结果,但如果不仔细考虑隐式等待的条件,则意味着更多的代码和可能更脆弱的测试。

这是哪种方法更好,还是有替代方案?

1 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的Angular?

如果您只需要等待渲染元素,您可以尝试:

ssize_t __vfs_read(struct file *file, char __user *buf, size_t count,
                   loff_t *pos)
{
        if (file->f_op->read)
                return file->f_op->read(file, buf, count, pos);
        else if (file->f_op->read_iter)
                return new_sync_read(file, buf, count, pos);
        else
                return -EINVAL;
}