首先:我们已经找到了解决问题的方法:
但他们从来没有工作过。
致我们的设置:
我们正在开发版本号为1.4.x的AngularJS应用。 当我们尝试测试I18n集成时,错误出现在E2E测试中。 对于I18n,我们使用angular-translate。
exports.config =
seleniumServerJar: "./node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar"
chromeDriver: "./node_modules/protractor/selenium/chromedriver"
capabilities:
browserName: "chrome"
name: "APP_NAME Selenium"
troubleshoot: true
framework: "jasmine2"
rootElement: "body"
onPrepare: ->
global.By = global.by
browser.manage().window().maximize()
jasmineNodeOpts:
showColors: true
defaultTimeoutInterval: 30000
isVerbose: true
奇怪的是,我们只在大约50%的时间内得到错误。有时测试通过而没有任何错误,然后我们有时间由于此错误至少有一次测试失败。
describe "The language", ->
it "should be german with german URL", ->
browser.get "/de/"
expect( element( By.id("slogan") ).getText() ).toEqual "SLOGAN HERE!"
it "should be preserved when a link is clicked", ->
browser.get "/de/"
element( By.css(".get-started a") ).click()
expect( browser.getCurrentUrl() ).toEqual "http://localhost:3123/de/import"
element( By.id("option-empty-table") ).click()
expect( browser.getCurrentUrl() ).toEqual "http://localhost:3123/de/editor"
it "should have the correct translations when a link is clicked", ->
browser.get "/de/"
element( By.css(".get-started a") ).click()
expect( element( By.css("#option-empty-table a h3") ).getText() ).toEqual "SOME STRING"
我们开始与Gulp进行测试。这是gulp的任务:
gulp.task "e2e",
"Runs all e2e tests.",
[
"run"
],
->
gulp.src E2E_FILES
.pipe protractor
configFile: "./protractor.config.coffee"
args: [
"--baseUrl"
BASEURL
]
BASEURL变量是" http://localhost:3123"
最后但并非最不重要的是"运行"来自gulp的任务:
gulp.task "run", "Serves the App.",
[
"build"
],
->
browserSync.init
server:
baseDir: BUILD.dirs.out
index: "/statics/master.html"
middleware: [modRewrite(['!\\.\\w+$ /statics/master.html [L]'])]
open: false
port: 3123
ui:
port: 3124
weinre: 3125
logLevel: "info"
notify: false
logPrefix: "SOME_PREFIX"
有没有人有这么奇怪的行为?
提前致谢!
答案 0 :(得分:3)
简答:
将scrollRestoreTechnique: 'cookie'
添加到您的browsersync配置。
答案很长:
Browsersync(> = 2.7.11)restores your scroll position刷新时将其存储在两个位置之一 - window.name
(默认值)或Cookie中。
不幸的是,Protractor使用名为Deferred Bootstrap的Angular功能,该功能使用window.name
并与BrowserSync冲突。来自AngularJS文档:
此功能使Batarang和测试运行器等工具能够挂接到角度的引导过程,并将更多模块潜入DI注册表,这可以替换或增加DI服务,以便进行检测或模拟重度依赖。
如果window.name包含前缀NG_DEFER_BOOTSTRAP!当调用angular.bootstrap时,引导过程将暂停,直到调用angular.resumeBootstrap()。
如果Browsersync在被Angular捕获之前覆盖了window.name
值,Angular将不会推迟其Bootstrap,而Protractor随后将无法找到resumeBootstrap
函数,因为它不存在。< / p>
告诉Browsersync使用cookie而不是window.name来解决冲突。