如何使用 Geb 访问外部网站
How to access external website using Geb
我正在使用 Geb 和 Groovy 自动化我的项目。例如:我正在登录 Gmail,并将不同的页面定义为 - 收件箱、已发送邮件、垃圾箱、草稿等。现在在我的规范中,我想访问外部网站,如 yahoomail。我如何定义访问外部网站的规范。
我使用 "go" 导航到雅虎邮件,如下面的规范
then: "I go to Yahoo mail page"
go "https://login.yahoo.com/"
and: "Signing into Yahoo mail "
at YahooLoginPage
在 YahooLoginPage.groovy 中找不到我在
中定义为静态的下一步按钮
static at = { $("#login-signin") }
我收到的错误消息:
条件不满足:
|
无
还有其他方法吗?
问题是您在 then:
Spock 块中使用 a method which has a void return type。每个语句都在 then:
块中断言,并且该方法调用的计算结果为 null
因为它的 return 类型因此你得到的失败。
基本上你不应该在 then:
中使用 Geb 的 go()
方法——而是在 given:
或 when:
块中使用它。
我认为上面 Erdi 和 Jeff 的回答很明确,但由于我很好奇想知道这是否可行,并且为了了解工作代码的示例,我继续构建了一个独立的 groovy 脚本运行 是一个 geb 规范。下面的脚本在雅虎登录流程中输入用户名并点击下一步按钮。
@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
和 运行ning:
~> groovy test.groovy
执行规范。应该注意的是,第一个 运行 将需要一些时间,因为脚本正在下载依赖项。还应该注意的是,使用不存在的用户名会破坏测试,因为测试假设雅虎会在点击下一步后将您发送到密码页面。
测试于:
Groovy Version: 2.4.15 JVM: 1.8.0_161 Vendor: Oracle Corporation OS: Mac OS X
我正在使用 Geb 和 Groovy 自动化我的项目。例如:我正在登录 Gmail,并将不同的页面定义为 - 收件箱、已发送邮件、垃圾箱、草稿等。现在在我的规范中,我想访问外部网站,如 yahoomail。我如何定义访问外部网站的规范。 我使用 "go" 导航到雅虎邮件,如下面的规范
then: "I go to Yahoo mail page"
go "https://login.yahoo.com/"
and: "Signing into Yahoo mail "
at YahooLoginPage
在 YahooLoginPage.groovy 中找不到我在
中定义为静态的下一步按钮static at = { $("#login-signin") }
我收到的错误消息:
条件不满足:
|
无
还有其他方法吗?
问题是您在 then:
Spock 块中使用 a method which has a void return type。每个语句都在 then:
块中断言,并且该方法调用的计算结果为 null
因为它的 return 类型因此你得到的失败。
基本上你不应该在 then:
中使用 Geb 的 go()
方法——而是在 given:
或 when:
块中使用它。
我认为上面 Erdi 和 Jeff 的回答很明确,但由于我很好奇想知道这是否可行,并且为了了解工作代码的示例,我继续构建了一个独立的 groovy 脚本运行 是一个 geb 规范。下面的脚本在雅虎登录流程中输入用户名并点击下一步按钮。
@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
和 运行ning:
~> groovy test.groovy
执行规范。应该注意的是,第一个 运行 将需要一些时间,因为脚本正在下载依赖项。还应该注意的是,使用不存在的用户名会破坏测试,因为测试假设雅虎会在点击下一步后将您发送到密码页面。
测试于:
Groovy Version: 2.4.15 JVM: 1.8.0_161 Vendor: Oracle Corporation OS: Mac OS X