我正在使用Geb和Groovy自动化我的项目。例如:我正在登录Gmail,我将不同的页面定义为 - 收件箱,已发送邮件,已删除邮件,草稿等。现在,在我的规范中,我想访问yahoomail等外部网站。如何定义访问外部Webiste的规范。 我用"去"导航到我的规范中的雅虎邮件
then: "I go to Yahoo mail page"
go "https://login.yahoo.com/"
and: "Signing into Yahoo mail "
at YahooLoginPage
在YahooLoginPage.groovy中,它没有找到我定义为静态的Next按钮
static at = { $("#login-signin") }
我收到错误消息:
条件不满意:
去" https://login.yahoo.com/"
|
空
还有其他办法吗?
答案 0 :(得分:3)
问题是您在then:
Spock块中使用a method which has a void return type。每个语句都在then:
块中声明,并且该方法调用的计算结果为null
,因为它的返回类型因此导致失败。
基本上你不应该在go()
中使用Geb的then:
方法 - 而是在given:
或when:
块中使用它。
答案 1 :(得分:0)
我认为Erdi和Jeff的答案在上面指出,但是因为我很想知道它是否可能,并且为了一个工作代码看起来如何的例子,我继续建立一个独立的运行geb规范的groovy脚本。以下脚本在yahoo登录流程中输入用户名并点击下一个按钮。
@Grapes([
@Grab("org.gebish:geb-spock:2.1"),
@Grab("org.spockframework:spock-core:1.1-groovy-2.4"),
@Grab("org.seleniumhq.selenium:selenium-htmlunit-driver:2.52.0"),
@GrabExclude('org.codehaus.groovy:groovy-all')
])
import geb.*
import geb.spock.*
import spock.util.EmbeddedSpecRunner
import java.util.logging.*
import org.w3c.css.sac.ErrorHandler
import com.gargoylesoftware.htmlunit.SilentCssErrorHandler
new EmbeddedSpecRunner().runClass(YahooSpec)
class YahooSpec extends GebReportingSpec {
def setup() {
// disable css errors output - don't do this for real tests
browser.driver.webClient.cssErrorHandler = new SilentCssErrorHandler()
}
def "should be able to enter username at yahoo"() {
when: "I go to Yahoo mail page"
to YahooLoginPage
then: "there should be a button with value 'Next'"
nextButton.value() == "Next"
when: "I enter a username and click next"
username = "BobbaFett"
nextButton.click()
then: "I should end up at the password page"
at YahooPasswordPage
greeting.text() == "Hello BobbaFett"
}
}
class YahooPasswordPage extends Page {
static url = "https://login.yahoo.com/account/challenge/password"
static at = { title.trim() == "Yahoo" }
static content = {
greeting { $("h1", class: "username")}
}
}
class YahooLoginPage extends Page {
static url = "https://login.yahoo.com/"
static at = { title == "Yahoo - login" }
static content = {
username { $("input#login-username")}
nextButton(to: YahooPasswordPage) { $("input#login-signin") }
}
}
将上述内容保存在文件test.groovy
中并运行:
~> groovy test.groovy
执行规范。应该注意的是,当脚本正在下载依赖项时,第一次运行将花费一些时间。还应该注意的是,使用不存在的用户名将打破测试,因为测试假设雅虎将在下一次打击后将您发送到密码页面。
经过测试:
Groovy Version: 2.4.15 JVM: 1.8.0_161 Vendor: Oracle Corporation OS: Mac OS X