标签: geb

我可以在 geb 中检查非 html 响应吗?

Geb 是一个很好的测试 Web 应用程序的框架,因为它非常直接地支持检查浏览客户端所看到的特定 DOM 元素。但是,有时请求的预期结果是纯文本(或 csv、json 等)。

有什么方法可以获取结果的原始文本吗?我还可以获得响应代码(例如 200)和内容类型吗?

testing groovy webtest geb

5
推荐指数
1
解决办法
2148
查看次数

如何在 grails 中运行 spock 功能测试的子集?

在其他一些测试框架中,我习惯于标记测试,例如@really_slow、@front_end

然后运行不同批次的测试,就像我可能想要设置一个构建从站来运行所有 real_slow 测试,并且可能想要运行标记为前端的所有测试,但没有一个被标记为非常慢。

目前,要在 grails 中运行 spock+geb 测试,我只需运行 grails test-app function:

我如何告诉它运行一个子集?

tags grails functional-testing spock geb

5
推荐指数
1
解决办法
2204
查看次数

即使我在正确的域中,Selenium addCookie 也会出现无效的 Cookie 域异常

所以我正在尝试使用 Selenium/Geb 将以前保存的 cookie 加载到我的网络驱动程序中。首先我转到域,然后尝试添加 cookie。但是 cookie 域和 url 域不相互注册:

Caught: org.openqa.selenium.InvalidCookieDomainException: 
You may only add cookies that would be visible to the current domain: .domain=.example.com => .www.example.com
Build info: version: '2.35.0', revision: '8df0c6bedf70ff9f22c647788f9fe9c8d22210e2', time: '2013-0  8-17 12:46:41'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-48-generic', java.version:   '1.6.0_27'
Driver info: driver.version: unknown
Run Code Online (Sandbox Code Playgroud)

似乎 cookie 的域是.example.com,而我去时访问的域http://example.com.www.example.com. 我能想到的唯一解决方案是覆盖某种方法来欺骗我当前的域,但我不知道如何去做。

java groovy selenium geb

5
推荐指数
1
解决办法
7936
查看次数

使用groovy在IntelliJ IDE中运行Cucumber Geb测试时出错

我在IntelliJ IDE中运行Geb测试时遇到以下错误.

org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: features.step_definitions.MyHomeStepDef.to() is applicable for argument types: (java.lang.Class) values: [class geb.pages.MyLandingPage]
Possible solutions: is(java.lang.Object), run(), run(), any(), any(groovy.lang.Closure), with(groovy.lang.Closure)
  at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:97)
  at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
  at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
  at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:904)
  at groovy.lang.Closure.call(Closure.java:415)
  at cucumber.runtime.groovy.GroovyBackend.invoke(GroovyBackend.java:133)
  at cucumber.runtime.groovy.GroovyStepDefinition.execute(GroovyStepDefinition.java:48)
  at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:45)
  at cucumber.runtime.Runtime.runStep(Runtime.java:248)
  ...
  at cucumber.cli.Main.main(Main.java:12)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:606)
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
  at ?.Given I am on the My home page(D:\MyFolder\src\test\resources\features\my-login-page.feature:5)
Caused by: groovy.lang.MissingMethodException: No signature of method: features.step_definitions.MyHomeStepDef.to() is applicable for argument types: (java.lang.Class) values: [class geb.pages.MyLandingPage] …
Run Code Online (Sandbox Code Playgroud)

groovy intellij-idea junit4 geb cucumber-jvm

5
推荐指数
1
解决办法
1059
查看次数

5
推荐指数
1
解决办法
3073
查看次数

有没有办法阻止Geb从void方法返回null?

在Spock规范中,期望的任何行:或者然后: block被评估并断言为boolean,除非它具有返回类型的签名void.

我注意到void在继承的任何类Navigator(例如PageModule类)上声明的方法有些奇怪.

假设我们有这样的例子:

class NavigationSpec extends GebSpec {

    def 'Collections page has a right header'() {

        when:
            to CollectionsPage

        then:
            hasHeaderText('Collections')
    }
}
Run Code Online (Sandbox Code Playgroud)

hasHeaderText()方法在CollectionsPage类中定义如下:

class CollectionsPage extends Page {

    static url = 'movies/collections'

    void hasHeaderText(String expectedText) {
        assert true
    }
}
Run Code Online (Sandbox Code Playgroud)

故意我只是true在那里断言所以它永远不会失败.即使它失败并出现错误:

Condition not satisfied:

hasHeaderText('Collections')
|
null
Run Code Online (Sandbox Code Playgroud)

void方法调用结果的评估方式和原因是null什么?

我知道如何"修复它".将方法返回类型声明为return boolean并返回就足够了true …

groovy spock geb

5
推荐指数
1
解决办法
855
查看次数

如何用groovy选择geb中的组合框

这就是我目前使用的Geb.我希望能够在页面中检索和设置组合框(或下拉列表)的值.我不太清楚怎么做,而且Geb书似乎没有涵盖这个.这是我正在尝试使用的HTML元素.

<select style="height: 22px; width: 370px;" id="ddlContactTypes" name="ddlContactTypes">
                <option value="-1">--Please Select--</option>
                <option value="18">Customer Hauler</option>
                <option value="19">Customer General</option>
                <option value="20">Rolloff</option>
                <option value="21">Supplier</option>
                <option value="22">Leads</option>
                <option value="23">Competition</option>
                <option value="24">Employees</option>
                <option value="25">Customer Car</option>
                <option value="26">Secondary Metals Recycler</option>
                <option value="27">Mills</option>
                <option value="28">Brokerage Customers</option>
                <option value="29">Type Jon</option>
</select>
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所做的.这当前将单击该元素,但我不知道如何实际选择一个.有任何想法吗?

static content = {
  title {$("title")}
  contactType { $("#ddlContactTypes") }
}
def addUser(){
  contactType.click() 
}
Run Code Online (Sandbox Code Playgroud)

testing groovy combobox geb drop-down-menu

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

如何在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
查看次数

由于黄瓜步骤语法,无法在gradle中生成测试报告

当我尝试在命令行中运行测试时,我收到以下错误消息.

测试基于Geb,Selenium和Cucumber/Groovy.

Caused by: org.gradle.api.GradleException: Could not generate test report to 'D:\Folder\ABCD\Auto\build\reports\tests'.
        at org.gradle.api.internal.tasks.testing.junit.report.DefaultTestReport.generateFiles(DefaultTestReport.java:84)
        at org.gradle.api.internal.tasks.testing.junit.report.DefaultTestReport.generateReport(DefaultTestReport.java:48)
        at org.gradle.api.tasks.testing.Test.executeTests(Test.java:482)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:530)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:513)
Run Code Online (Sandbox Code Playgroud)

添加了更多错误详情:

Caused by: java.io.FileNotFoundException: D:\Folder\ABCD\Auto\build\reports\tests\packages\When I enter valid registration details "d2bcons" and "fi rstdtwob" and "lastdtwob" and "d2bcons@trashcanmail.html (The filename, directory name, or volume label syntax is incorrect) 
Run Code Online (Sandbox Code Playgroud)

什么可能导致错误?

谢谢

cucumber gradle geb selenium-webdriver

4
推荐指数
2
解决办法
2220
查看次数

处理重定向并隐含在断言中

我想测试的网站有一个登陆页面,要求您选择一种语言.您可以通过在网址中添加额外参数来跳过此问题.我想,以测试这种行为Geb,并Spock为测试框架.

所以我有一个语言选择的登陆页面:

class LanguageSelectionPage extends Page {

    static url = "http://localhost:8080/registration/"

    static at = { $("form#languageForm") }
}
Run Code Online (Sandbox Code Playgroud)

它重定向到的第二个页面:

class InsertCardReaderPage extends Page {

    static at = { welcomeTitle1 }

    static content = {
        welcomeTitle1(wait: true, cache: false) { $("#eidWelcomeTitle1") }
        welcomeTitle2(wait: true, cache: false) { $("#eidWelcomeTitle2") }
    }
}
Run Code Online (Sandbox Code Playgroud)

(我从粘贴的代码中删除了一些方法)

所以这是我的测试:

given:
to LanguageSelectionPage, "09";

expect:
at InsertCardReaderPage;
Run Code Online (Sandbox Code Playgroud)

"09"是网址中的一个额外参数,当这个参数可用时,您将立即被服务器重定向(http重定向,因此页面确实会更改)到InsertCardReaderPage.现在,我的问题是该to语句对at闭包执行隐式断言.这个失败是因为您已经从页面重定向.

在这种情况下,有没有办法有条件地禁用这个隐式断言?或者任何其他提案如何设置页面?我很新,Geb在这种情况下找不到任何似乎对我有用的文档.

geb

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