Как получить доступ к внешнему сайту с помощью Geb - PullRequest
0 голосов
/ 14 мая 2018

Я автоматизирую свой проект, используя Geb и Groovy. Например: я захожу в Gmail и определяю разные страницы как - Входящие, Отправленные, Корзина, Черновики и т. Д. Теперь в моей спецификации я хотел получить доступ к внешнему веб-сайту, например, yahoomail. Как я могу определить это спецификацией для доступа к внешнему Webiste. Я использую «go» для перехода на почту Yahoo, как показано ниже в моей спецификации

    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") }

Я получаю сообщение об ошибке:

Состояние не выполнено:

go "https://login.yahoo.com/"

|

нуль

Есть ли другой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я думаю, что ответы Эрди и Джеффа выше, но мне было любопытно узнать, возможно ли это, и для примера того, как может выглядеть рабочий код, я пошел дальше и создал автономный Groovy-скрипт, который запускает спецификацию geb. Приведенный ниже скрипт вводит имя пользователя в поток входа в 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

выполняет спецификацию. Следует отметить, что первый запуск займет некоторое время, так как скрипт загружает зависимости. Следует также отметить, что использование несуществующего имени пользователя нарушит тест, поскольку тест предполагает, что Yahoo отправит вас на страницу пароля после нажатия кнопки «Далее».

Проверено на:

Groovy Version: 2.4.15 JVM: 1.8.0_161 Vendor: Oracle Corporation OS: Mac OS X
0 голосов
/ 15 мая 2018

Проблема в том, что вы используете метод, который имеет тип возврата void в then: блоке Спока. Каждый оператор утверждается в then: блоках, и вызов этого метода оценивается в null из-за его типа возврата и, следовательно, ошибки, которую вы получаете.

Как правило, вы не должны использовать метод go() Геба в then: - используйте его в блоке given: или when:.

...