标签: geb

如何在Geb测试中浏览浏览器的历史记录

在Geb测试中,我想在浏览器的历史记录中导航回来(即点击浏览器的后退按钮).我还没有找到使用Geb API的方法.

我所做的是:

driver.navigate().back()               // usage of WebDriver API
browser.page(<<previous Page class>>)  // this tells Geb that the page has changed
Run Code Online (Sandbox Code Playgroud)

代码有效,但我不喜欢这里使用WebDriver API.另一个想法是用JavaScript做,但这也是我想避免的.

是否有更多的Gebish方式在浏览器的历史中导航?

groovy automated-tests geb

4
推荐指数
1
解决办法
1453
查看次数

使用GEB和Cucumber在页面中封装逻辑

使用GEB我使用页面对象模式静态封装有关不同页面的信息.

然后,我重构了我的GEB代码,以便从一个单独的类中使用,因此我可以使用方法调用封装常用命令.

例如,我将有一个方法login(),它将调用相应的GEB代码登录我正在测试的网站.然后我会在TestHelper类上使用方法调用来使用其他常用函数.

我想将这些常用功能移动到他们所采用的页面上.例如,搜索页面将具有搜索方法,登录页面将具有登录方法.通过这种方式,我可以构建一个页面库,其中包含所有常用功能,以便在多个GEB项目中使用.现在要做到这一点,每个页面必须在geb.Browser上有一个句柄,因此我现在必须在测试设置中实例化每个页面.通过这样做,我不再能够使用标准页面对象模式.

to ReviewQueuePage
assert at(ReviewQueuePage)
Run Code Online (Sandbox Code Playgroud)

上面的代码将抛出一个空指针,因为对象不再能够以静态方式访问,这意味着我必须将代码更改为

go ReviewQueuePage.url
Run Code Online (Sandbox Code Playgroud)

这将删除将该类用作页面的所有功能.

有没有人有任何解决方案来封装每个页面的数据,因为它不会导致页面采取不同的行为.

bdd groovy cucumber geb

3
推荐指数
1
解决办法
1709
查看次数

你如何在Grails Geb/Spock测试用例中获得sessionFactory?

我想我需要在GebSpec测试中刷新hibernate会话,所以我想得到sessionFactory.

它看起来应该注入,但当我做这样的事情: -

class MySpec extends GebSpec {
def sessionFactory
...
def "test session"(){
....do some setup
then: 
  assert sessionFactory != null
}
Run Code Online (Sandbox Code Playgroud)

它失败,sessionFactory为null.

grails groovy spock geb

3
推荐指数
1
解决办法
5316
查看次数

Grails Geb测试执行顺序

在我的grails应用程序中,我使用Spock和Geb来执行功能测试.

由于所有测试都在同一个数据库上运行,因此我想提供正在执行CRUDSpec类的顺序.如何指定?

  1. 一流测试博客作者创作
  2. 第二类,假设第一次测试成功运行,测试创建后
  3. 第三课为帖子添加评论

grails functional-testing spock geb

3
推荐指数
1
解决办法
1859
查看次数

使用geb保存当前网址

我正在进行测试geb,但我遇到了问题.我需要保存/打印当前页面的地址(功能SaveUrl()).

Spock测试:

class TestSpec extends GebReportingSpec {
def "Google"() {
    given: "go to google.com"
    to GooglePage

    when: "we at Google home page"
    at GooglePage

    then: "Search Yahoo"
    Search("Yahoo")
    SaveUrl()
    }
}
Run Code Online (Sandbox Code Playgroud)

GooglePage:

class GooglePage extends Page {
    static url = "http://www.google.by"
    static at = { $("title").text() == "Google"}
    static content = {
        theModule { module SearchModule }
    }

def Search(String arg0) {
    theModule.field.value(arg0)
    theModule.search.click()
    }

def SaveUrl() {
    // need implement
    }
}
Run Code Online (Sandbox Code Playgroud)

Modile:

class SearchModule …
Run Code Online (Sandbox Code Playgroud)

groovy spock geb

3
推荐指数
1
解决办法
3808
查看次数

如何检查Geb模块是否存在"内容"?

我有点新的整个Selenium/ Geb事情,所以我可能会对此有点不对劲,但我试图让exists()下面的代码方法才能正常工作.

class Question extends Module {
    static base = { $("fieldset") }
    static content = {
        input { $("input[type=text]") }
        name { input.getAttribute("name").toString() }
    }
    boolean exists() {
        return input.isPresent()
    }
Run Code Online (Sandbox Code Playgroud)

令人沮丧的是,当我尝试执行该代码时(从Spock测试中,"转到"包含此模块的PageObjectm,我得到以下内容:

所需的页面内容'输入 - SimplePageContent(所有者:问题 - 问题(所有者:MyPage,args:[],值:null),args:[],值:null)'不存在

我尝试了很多其他的东西,包括:

  • if (input) return true; return false,
  • ... input.size() == 0,
  • 使用static at = {...}(似乎不支持模块"

有任何想法吗

geb

3
推荐指数
1
解决办法
8078
查看次数

Geb:测试之间等待/休眠

有没有办法在测试之间等待一段时间?我需要一个解决方案来弥补服务器滞后.创建记录时,在我的环境中可以搜索记录之前需要一点时间.

在下面的代码示例中,如何在第一次测试和第二次测试之间等待30秒,并且在第二次测试和第三次测试之间没有等待时间?

    class MySpec extends GebReportingSpec {
        // First Test
        def "should create a record named myRecord"() {
            given:
            to CreateRecordsPage

            when:
            name_field = "myRecord"

            and:
            saveButton.click()

            then:
            at IndexPage
        }

        // Second Test
        def "should find record named myRecord"() {
            given:
            to SearchPage

            when:
            search_query = "myRecord"

            and:
            searchButton.click()

            then:
            // haven't figured this part out yet, but would look for "myRecord" on the results page
        }

        // Third Test
        def "should delete the record named myRecord"() {
            // …
Run Code Online (Sandbox Code Playgroud)

automated-tests geb

3
推荐指数
1
解决办法
1万
查看次数

Geb的一般问题(StaleElementReferenceException和Wait Timeouts)

根据"Book of Geb",我开始绘制门户网站的网页.我更喜欢使用静态内容闭包块中定义的变量,然后在页面方法中访问它们:

static content = {
    buttonSend { $("input", type: "submit", nicetitle: "Senden") }
}
def sendLetter() {
    waitFor { buttonSend.isDisplayed() }
    buttonSend.click()
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,有时候我会得到Geb等待超时异常(60秒后),甚至更糟糕的是我收到了众所周知的"StaleElementReferenceException".

使用"isEnabled"代替"isDisplayed"时可以避免等待超时,但对于"StaleElementReferenceException",我只能应用以下解决方案:

def sendLetter() {
    waitFor { buttonSend.isEnabled() }
    try {
        buttonSend.click()
    } catch (StaleElementReferenceException e) {
        log.info(e.getMessage())
        buttonSend.click()
    }
}
Run Code Online (Sandbox Code Playgroud)

我想,这个解决方案并不是很好,但我无法应用另一篇文章中描述的明确等待.因此,我有一些一般性的问题:

  • 当页面是动态的时候,我应该避免使用静态内容定义吗?
  • 在什么时间或事件Geb刷新它的DOM?如何触发DOM刷新?
  • 为什么在使用CSS选择器时仍然会出现"StaleElementReferenceException"?

我希望每一个有助于理解或解决这个问题的提示.最好的方法是拥有一个简单的代码示例,因为我还是初学者.谢谢!

groovy exception-handling staleobjectstate geb

3
推荐指数
1
解决办法
6626
查看次数

如何重构常见的Geb测试序列

假设我有登录的多个Geb/Spock测试.例如:

@Stepwise
Class AddNewPictureSpec extends GebSpec {
  def "User at login page"() {
    given: "User beings from login page"
    to LoginPage
  }
  def "User gets redirected to Main page"() {
    given: "User at Login page"
    at LoginPage

    when: "User signs in"
    signIn "username", "pw"
    to MainPage

    then:
    at MainPage

  def "other test sequences follow...."() {
  }    
}
Run Code Online (Sandbox Code Playgroud)

另一个测试规范具有完全相同的启动顺序:

@Stepwise
Class EditPictureSpec extends GebSpec {
      def "User at login page"() {
        given: "User beings from login page"
        to LoginPage
      }
      def …
Run Code Online (Sandbox Code Playgroud)

grails spock geb

3
推荐指数
1
解决办法
1706
查看次数

每次测试后,geb是否将数据库回滚到其处于未处理状态?

我一直在Grails上用Geb弄湿了,但是没有很多关于它如何表现的文档.例如,geb如何处理回滚?根据我的观察,它运行应用程序并在浏览器上运行测试,而不会在测试之间关闭它.

当一个规范(规范A)改变一个对象(对象Z)时,数据库数据会发生什么,稍后一些测试,另一个规范(规范B)改变同一个对象?每次运行规范时,geb是否将数据库回滚到它的处女状态?我正在努力确认,因为我有单独执行时运行良好的geb测试,但是当我将它们作为套件运行时,其中一些失败了,我能想出的最好的理由是数据不是原始状态当对它进行第二次测试时.有什么想法吗?

grails geb

3
推荐指数
1
解决办法
402
查看次数