如何使用 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") }

我收到的错误消息:

条件不满足:

转到“https://login.yahoo.com/

|

还有其他方法吗?

问题是您在 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