我们的AngularJS应用程序有一个端到端测试套件。使用量角器编写。测试通过Grunt任务运行。当在Windows命令行上本地运行时,测试通过。当我们在我们运行Bamboo的CI机器上的命令行上运行它们时,它们会通过。然而,当Bamboo运行grunt任务“test:e2e”时,它们会失败。失败是各种超时(参见下面的日志示例)。我们已经尝试增加一些超时但似乎没有帮助。事实上,30年代的超时似乎已经相当大了。
我没有想法。有没有人有任何其他调查途径建议?我们暂时禁用了e2e作为CI构建的一部分。
build 17-Jun-2015 23:34:59 [4mRunning "protractor:run" (protractor) task[24m
build 17-Jun-2015 23:35:00 Starting selenium standalone server...
build 17-Jun-2015 23:35:00 [launcher] Running 1 instances of WebDriver
build 17-Jun-2015 23:35:04 Selenium standalone server started at http://10.161.0.147:58338/wd/hub
build 17-Jun-2015 23:35:09 Started
error 17-Jun-2015 23:46:59 A Jasmine spec timed out. Resetting the WebDriver Control Flow.
error 17-Jun-2015 23:46:59 The last active task was:
error 17-Jun-2015 23:46:59 WebElement.click()
error 17-Jun-2015 23:46:59 at [object Object].webdriver.WebDriver.schedule (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:345:15)
error 17-Jun-2015 23:46:59 at [object Object].webdriver.WebElement.schedule_ (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:1727:23)
error 17-Jun-2015 23:46:59 at [object Object].webdriver.WebElement.click (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:1832:15)
error 17-Jun-2015 23:46:59 at actionFn (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\element.js:75:32)
error 17-Jun-2015 23:46:59 at C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\element.js:394:17
error 17-Jun-2015 23:46:59 at Array.forEach (native)
error 17-Jun-2015 23:46:59 at C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\element.js:393:9
error 17-Jun-2015 23:46:59 at C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\base.js:1582:15
error 17-Jun-2015 23:46:59 at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1654:20)
error 17-Jun-2015 23:47:29 A Jasmine spec timed out. Resetting the WebDriver Control Flow.
error 17-Jun-2015 23:47:29 The last active task was:
error 17-Jun-2015 23:47:29 Protractor.waitForAngular()
error 17-Jun-2015 23:47:29 at [object Object].webdriver.WebDriver.schedule (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:345:15)
error 17-Jun-2015 23:47:29 at [object Object].Protractor.executeAsyncScript_ (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\protractor.js:251:26)
error 17-Jun-2015 23:47:29 at [object Object].Protractor.waitForAngular (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\protractor.js:274:15)
答案 0 :(得分:1)
为什么量角器测试可以在一个地方传递,但在其他地方失败有很多原因。这是我发生在我身上的一个非详尽的原因清单:
数字1和2很容易诊断和修复,因此我不会进一步详细了解它们。 #3对于诊断和修复来说更加棘手和阴险,因为错误是时间依赖的,只是偶尔发生。
我发现可以找到许多这些时间错误的一件事是强迫你的服务器真的很慢(显然只是用于诊断)。当我们在所有REST调用中添加5s等待时,这在我们的测试中发现了很多瑕疵。解决所有这些问题是一个漫长而乏味的过程,但它会起作用。
如果您不想要一个真正的修复,但只想修补问题,请尝试向您的WebDriver实例添加implicit wait。在你的protractor.conf文件中它看起来像这样:
browser.webDriver.implicitlyWait(5000);