Backbone.js 使用FluentAutomation测试RequireJS应用程序?

Backbone.js 使用FluentAutomation测试RequireJS应用程序?,backbone.js,selenium-webdriver,requirejs,nunit,fluentautomation,Backbone.js,Selenium Webdriver,Requirejs,Nunit,Fluentautomation,我正试图利用FluentAutomation.SeleniumWebDriver和NUnit为基于RequireJS的主干应用程序编写一些UI测试。所讨论的HTML页面包含一个典型的datamain属性,用于加载应用程序的RequireJS模块。我的任务是正确地检测应用程序何时满载这些工具;到目前为止,我唯一能够始终如一地工作的就是使用显式的秒等待,如下所示: I.Open("http://myapp") .Wait(5) .Enter("foo").In("input[name

我正试图利用FluentAutomation.SeleniumWebDriver和NUnit为基于RequireJS的主干应用程序编写一些UI测试。所讨论的HTML页面包含一个典型的
datamain
属性,用于加载应用程序的RequireJS模块。我的任务是正确地检测应用程序何时满载这些工具;到目前为止,我唯一能够始终如一地工作的就是使用显式的秒等待,如下所示:

I.Open("http://myapp")
    .Wait(5)
    .Enter("foo").In("input[name=username]")
    .Enter("bar").In("input[name=password]")
    .Click("button")
    .Wait(5)
    .Expect.Text("Welcome").In("#welcome");
这不太理想——我上面写的测试总是至少需要10秒才能运行,而实际上应用程序“准备就绪”的速度可能要快得多。我希望能够做到的是:

I.Open("http://myapp")
    .WaitUntil(() => I.Assert.Exists("input[name=username]"))
    .Enter("foo").In("input[name=username]")
    .Enter("bar").In("input[name=password]")
    .Click("button")
    .WaitUntil(() => I.Assert.Exists("#welcome"))
    .Expect.Text("Welcome").In("#welcome");
然而,这不起作用——在这里使用WaitUntil实际上似乎阻止了应用程序加载,原因我不清楚,因为我只是在默认等待期(30秒)后收到超时异常,说明它无法在该时间段内找到有问题的元素

我看到Selenium 2为这种场景提供了一个WebDriverWait,这在这里可能会起作用,但我不确定如何在FluentAutomation中使用它(在GitHub上快速搜索FluentAutomation代码似乎并不表明它在库中使用)

在FluentAutomation中,我可以使用什么来正确地等待RequireJS模块(或它加载的DOM)就绪

其他详细信息:


这可能根本不是一个RequireJS兼容性问题。我进一步查看了该应用程序,发现在
单击(“按钮”)
之后发生的事情实际上是一个
窗口。位置。替换
——而不是RequireJS异步模块加载。显然,这是应用程序中发生这种情况的地方。因此,是一个
窗口。location
重定向一个已知场景,该场景可能会导致
WaitUntil
出现问题,是否有其他方法(除了简单的
等待(5)
)可以正确处理此问题?

WebDriverWait在功能上与WaitUntil相同,因此结果将是相同的。为了寻找一个简单的repro选项,我对.view-1/.view-4进行了测试,在断言上没有任何问题,所有这些都是通过require异步加载的。你能提供更多的信息吗?另外,请验证“瞥见”未运行。以前的问题通过在测试()Spile未运行时禁用Spile得到解决;我将编辑这个问题,为应用程序提供更多细节,以及失败是如何表现出来的。