0

助けてください。

login/auth.gsp ページがあります

本体内に次のコードを使用

<div id="page-wrap">
  <div class="login-block">
    <g:if test="${flash.message}">
      <h3  class='login_message'>${flash.message}</h3>
    </g:if>
    <g:else>
      <h3>IMMS Login</h3>
    </g:else>
    <form action='${postUrl}' method='POST' id='loginForm' class='cssform' autocomplete='off'>
      <p>
        <label for='username'><g:message code="auth.username.label" default="User Name"/></label>
        <input type='text' class='text_' name='j_username' id='username'/>
      </p>
      <p>
        <label for='password'><g:message code="auth.password.label" default="Password"/></label>
        <input type='password' class='text_' name='j_password' id='password'/>
      </p>
      <p class="submit-wrap">
        <input type='submit' value="${message(code: 'default.button.Login.label', default: 'Login')}"/>
      </p>
    </form>
  </div>
  <div class="image-block"></div>
</div>

test/functional/pages ディレクトリの下に、LoginPage があります

package pages

import geb.Page

class LoginPage extends Page {
  static url = "login/auth/"
  static at = {
    userName.text() == ""
  }
  static content = {
    userName { $("input", name : "j_username") }
    password { $("input", name : "j_password") }
    loginButton(to: IndexPage){ $(".submit-wrap").find("input").first() }
  }
}

そして、ここに私のテストコードがあります

import geb.spock.GebReportingSpec
import pages.*
import spock.lang.Stepwise
@Stepwise
class BaseSpec extends GebReportingSpec {
  String getBaseUrl() {
    return "http://localhost:8080/IMMS/"
  }

  def "open URL"() {
    when:
    to LoginPage
    then:
    at LoginPage
  }

}

テストを実行して失敗しました。これがレポートです

<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="0" failures="1" hostname="SGCDMSSVR" name="BaseSpec" tests="1" time="24.715" timestamp="2011-07-12T07:00:04">
  <properties />
  <testcase classname="BaseSpec" name="open URL" time="24.693">
    <failure message="Condition not satisfied:

at LoginPage
|
false
" type="junit.framework.AssertionFailedError">junit.framework.AssertionFailedError: Condition not satisfied:

at LoginPage
|
false

    at BaseSpec.open URL(BaseSpec.groovy:18)
</failure>
  </testcase>
  <system-out><![CDATA[--Output from open URL--
]]></system-out>
  <system-err><![CDATA[--Output from open URL--
]]></system-err>
</testsuite>

私を助けるアイデアはありますか?構成が足りないのでしょうか、それとも jQuery のようなナビゲーションが正しくないのでしょうか?

テストには、「Functional Test Development」プラグインを使用しています。


更新: 最初は、サンプルから正確に GebConfig を使用しました。 デフォルトのドライバーが HTMLUnit であることに気付きました。

コマンド コンソールからFunctional Test Development機能を使用して機能テストを実行すると、

grails develop-functional-tests

すべての機能テストを実行するオプションを選択します。コンソールに失敗したテストが表示されました。

デフォルトのドライバーを Firefox に変更したとき。それでも失敗しましたが、自動的に Firefox ブラウザーが開き、次の URL を開くことがわかります。

http://localhost:8080/IMMS/login/auth.gsp

URL 404 を開くことができませんでした。これがテストが失敗した理由だと思います。

IDEから以下を実行しようとしました。

grails test-app -functional

動作し、Firefox ブラウザが開き、書かれたテスト スクリプトとテスト パスが実行されました。

そこで、ここでタイトルを修正します。現在、grails の機能テスト開発プラグインに焦点が当てられています。おそらく、このプラグインを試したことがあり、答えがある人はいますか? ありがとう。

PS: 質問を修正してもよろしいですか? または、stackoverflowで新しい質問を作成する必要がありますか?

4

2 に答える 2

3

at条件LoginPageが失敗しています (期待するページにないか、条件を失敗させるマークアップに問題があります)。を入れることでより多くの情報を得ることができますassert

お気に入り:

package pages

import geb.Page

class LoginPage extends Page {
  static url = "login/auth/"
  static at = {
    assert userName.text() == ""
    true
  }
  static content = {
    userName { $("input", name : "j_username") }
    password { $("input", name : "j_password") }
    loginButton(to: IndexPage){ $(".submit-wrap").find("input").first() }
  }
}

これにより、セレクターの実際の値がわかります。

いずれにせよ、その状態は脆いと思います。ページを識別するには、ドキュメントのタイトル、またはページ ヘッダーなどの特定の文字列を確認することをお勧めします。あなたの場合、<h3>ヘッダーを一致させます。すなわち:

static at = {
  assert $('h3').text() =~ /IMMS Login/
  true
}

true最後に、すでに条件をアサートしているため、アットチェックが失敗しないようにしますが、アサートにはnull値があります。)

また、より一貫性のある代替手段については、このブログ投稿を確認してください。

于 2011-07-12T15:17:22.693 に答える
0

ここで grails プラグインの作成者に尋ねました。つまり、基本的にはテスト コードの問題ではありません。テストには別のポートを使用する必要があります。

于 2011-08-04T00:56:11.783 に答える