0

我正在使用 Ratpack 和资产管道构建前端,并正在使用 Geb 对其进行测试。我需要一些页面是动态的,并且由于 Knockoutjs 似乎不再处于开发阶段,我一直在使用 VueJS。我的问题是,虽然我能够从我的 Vue 模型中直观地看到数据,但我的 Geb 测试由于找不到内容而中断。我尝试增加额外的时间,切换到不同的浏览器(我主要使用 PhantomJS,但尝试使用 Firefox 和 Chrome),并且每次以这种方式运行时我都无法看到元素。我可以移开视线并继续开发,但如果我至少无法验证页面上显示的内容,那感觉不对。我知道 Vue 相对较新,但我想如果你使用 ReactJS 的东西可能会发生同样的情况。我' 下面附上相关的代码部分。对此进行测试的最佳方法是什么?

构建.gradle

    testCompile "org.spockframework:spock-core:1.0-groovy-2.4", {
      exclude module: "groovy-all"
  }
  testCompile "org.gebish:geb-spock:0.10.0"
  // Geb integration

    testCompile "org.seleniumhq.selenium:selenium-chrome-driver:2.51.0"
    testCompile "org.seleniumhq.selenium:selenium-firefox-driver:2.51.0"
    testCompile("com.codeborne:phantomjsdriver:1.2.1") {
        // phantomjs driver pulls in a different selenium version
        transitive = false
    }

vuetest.gtpl

    layout 'layouts/main.gtpl',                                   
    title: 'Vue Test',                                
    bodyContents: contents {
        div('id':'main'){
            p "The result is:"
            vuetest{}
        }

   } 

VueTest.js

    Vue.component('vuetest', {
    template: '<p>Hello from Vue</p>'
})

VueTestPage.groovy

import geb.Page

class VueTestPage extends Page {

  static url = "/"

  static at = { title == "Vue Test" }

  static content = {
    vueGreeting(required:false){$('p',text:"Hello from Vue").text()}
  }
}

测试

      def "vue testing"(){
    when:
    to VueTestPage
    then:
    at VueTestPage
    waitFor(vueGreeting.displayed) //fails
  }
4

1 回答 1

1

这更像是一个 Geb 问题。当我复制您的步骤时,我收到一条消息:

Caused by: groovy.lang.MissingPropertyException: No such property: displayed for class: java.lang.String

考虑到您要求,这是有道理的vueGreeting(required:false){$('p',text:"Hello from Vue").text()}

您可以将内容更改为vueGreeting(required:false){$('p',text:"Hello from Vue")}以便使用vueGreeting.displayed

或用原始vueGreeting定义更改规范说

then:
waitFor {
    vueGreeting == 'Hello from Vue'
}
于 2016-02-28T17:15:13.790 回答