5

送信ボタンのないフォームで作業する必要があるGeb(WebDriver)でテストを構築しています。ユーザーの観点からは、検索語を入力してキーボードのEnterキーを押すのと同じくらい簡単に使用できます。

純粋なスクリプト形式でGebを使用すると、次のように、入力するテキストに特別なキーコードを追加することでこれを回避できます。

import org.openqa.selenium.Keys

$('input[id=myInputField]') << "michael"+Keys.ENTER

それはうまくいきます。しかし、Gebが推奨するページオブジェクトパターン(http://www.gebish.org/manual/0.7.1/pages.html#the_page_object_pattern)を使用したい場合、何をすべきかわかりません。EmployeeSearchPageオブジェクトのコンテンツセクションで、欠落しているsearchButtonと、結果のページの処理方法をGebに指示するその「to」オブジェクト参照を複製するために何を定義しますか?

class EmployeeSearchPage extends Page {
    static url = "http://localhost:8888/directory/"
    static at = { title == "Employee Directory" }
    static content = {
        searchField { $("input[id=myInputField]") }
        // THE FOLLOWING BUTTON DOESN'T EXIST IN MY CASE
        searchButton(to: EmployeeListPage) { $("input[value='SUBMIT']") }
    }
}

テスト用に送信ボタンをフォームに追加し、CSSを使用してユーザーのビューの外に配置できることに気付きましたが、なぜアプリをテストに適合させる必要があるのでしょうか。物事は逆に機能するはずです。

私は多くのWebテストフレームワークを評価してきましたが、このタイプのフォームは、少なくともドキュメントに関する限り、それらの多くに問題があることがわかりました。

何か案は?ありがとう!

4

2 に答える 2

7

目的を達成するためにjs統合を使用する必要はありません。

コンテンツだけでなく、ページクラスでメソッドを定義することもできます。次の方法で、探していることを実行する送信メソッドを実装できます。

class EmployeeSearchPage extends Page {
    static url = "http://localhost:8888/directory/"
    static at = { title == "Employee Directory" }
    static content = {
        searchField { $("input[id=myInputField]") 
    }

    void submitForm() {
        searchField << Keys.ENTER
        browser.page EmployeeSearchResultsPage
    }
}

そしてそれを使用するには:

to EmployeeSearchPage
searchField << 'michael' // searchField = 'michael' would have the same effect
submitForm()
于 2013-01-08T13:06:58.253 に答える
1

Gebは、ブラウザのコンテキストでJavaScriptを実行するためのサポートを提供します。詳細については、Gebのドキュメントを参照してください。

これを使用して、Webアプリ自体でJavaScriptを使用してフォームを送信するのとまったく同じようにフォームを送信できます。たとえば、jQueryを使用している場合は、次のように簡単になります。

js.exec('$("#myForm").submit()')
于 2013-01-08T07:56:31.987 に答える