gebでフレームページのテキストリンクするには

858 views
Skip to first unread message

7snow

unread,
Sep 2, 2018, 1:46:40 AM9/2/18
to 日本Seleniumユーザーコミュニティ

プログラミング超初心者です。Selenium実践入門という書籍を見ながらSeleniumの使い方を猛勉強しています。
環境構築(eclipseでgroovyとgradleのセットアップが完了)がやっと終わり、いろいろ試そうとしています。

■やりたいこと■
下記URLにアクセスし左側のフレームの「自己紹介」をクリックしたい。
(半日いろいろなサイトを探索しても分からないため、、投稿させてもらいました。)


■教えてほしいこと■
①フレームのあるページのコードの書き方が分かりません。
①テキストリンクのコードの書き方が分かりません。
②TEST実施後ブラウザを閉じたくない。

以下に回答のコードを記載していただけないでしょうか。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package sample
import org.junit.Test

import geb.junit4.GebTest

class GebSampleTest extends GebTest {

@Test
void 自己紹介ページが表示されること() {
     //ここに何とコードを書けばよいかわかりません。


}

}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

■アドバイスいただきたいこと■
gebのコードが紹介されているサイトがあれば教えてください。

Yotaro Takahashi

unread,
Sep 2, 2018, 9:04:45 AM9/2/18
to 日本Seleniumユーザーコミュニティ
こんにちは。PoohSunnyです。

> ■教えてほしいこと■
> ①フレームのあるページのコードの書き方が分かりません。

GebにはwithFrameという記法があるので、それを利用します。

> ①テキストリンクのコードの書き方が分かりません。

今回であればaタグなので、
$("a", text : "自己紹介")
といった形で取れると思います。

> ②TEST実施後ブラウザを閉じたくない。

これ、ちょっと調べてみたいのですが、Gebではできないかもしれません。
(自分の任意のタイミングでブラウザを閉じることはできるが、閉じさせないようにはできない模様)
Gebはブラウザ操作の面倒ごとを排除するためにあるので、後片付けを意図的にしないという運用は想定外かもしれません。
こちら、どういう意図なのかを教えていただけませんか?
もしちゃんとクリックできたかを目検したいとかであれば、 GebTestではなくGebReportingTestを継承すると代わりに実現できるかもしれません。

上記を踏まえたサンプルコードはこちらです。
Geb 2.2, ChromeDriver 2.41, Selenium 3.6.0で試しています。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import geb.junit4.GebReportingTest
import org.junit.Test


class GebSampleTest extends GebReportingTest {


@Test
void 自己紹介ページが表示されること() {
go("http://www.ink.or.jp/~bigblock/html/frame/01.html")
        withFrame('menu') { $('a', text: '自己紹介').click() }
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> ■アドバイスいただきたいこと■
> gebのコードが紹介されているサイトがあれば教えてください。

英語なのですが、公式のThe Book Of Gebにサンプルが豊富にあります。
今回利用したwithFrameもこちらに記載がありました。 http://www.gebish.org/manual/current/#dealing-with-frames

以上です。

2018年9月2日日曜日 14時46分40秒 UTC+9 7snow:

7snow

unread,
Sep 2, 2018, 10:26:14 AM9/2/18
to 日本Seleniumユーザーコミュニティ
PoohSunnyさん、ご返信ありがとうございます。大変勉強になります。

■結果■
・教えていただいたコードを実行したのですが、エラーになってしまいました。
 →実行時のテスト状況は以下です。
  ブラウザが表示され、数秒すると対象のWEBページが表示されないまま、ブラウザが閉じてしまう。
・しかし、②対応の修正コードimport geb.junit4.GebReportingTest」を元のコード「import geb.junit4.Test」に戻すと、エラーなく実行できました。
 →import geb.junit4.GebReportingTest」が私の環境に対応していないと推察していますが、ここを変えた場合は、環境をどのように更新すればよいのでしょうか。
 すみませんが、エラーを解消するにはどうすればよいかご教示いただけますでしょうか?

■ご質問の回答■
>Gebはブラウザ操作の面倒ごとを排除するためにあるので、後片付けを意図的にしないという運用は想定外かもしれません。
>こちら、どういう意図なのかを教えていただけませんか?
>もしちゃんとクリックできたかを目検したいとかであれば、 GebTestではなくGebReportingTestを継承すると代わりに実現できるかもしれません。
おっしゃる通りです、クリックできたかの目検としてです。

■勉強になったこと■
htmlのテキストリンクはタグが<a></a>だから”a”を使うのですね、参考書みると他にもdivやinputとか記載がありました。
おかげさまで、色々理解が促進されました。大変ありがとうございます。

以上です。
2018年9月2日日曜日 22時04分45秒 UTC+9 Yotaro Takahashi:

Yotaro Takahashi

unread,
Sep 2, 2018, 11:11:10 PM9/2/18
to 日本Seleniumユーザーコミュニティ
> ・教えていただいたコードを実行したのですが、エラーになってしまいました。

すみません、一点ご案内が不足していましたね。
GebReportingTestは設定ファイル(GebConfig.groovy)に出力ディレクトリの設定が必要です。
おそらくそれが原因かと思います(本当にそれかどうかはエラーメッセージなどをみないとはっきりしませんが)。

reportsDir = "target/geb-reports←ここはご自身の環境に応じて変更してください"

今回に限らずですが、エラーの時はコンソールなどに表示されるエラーメッセージをコピーして貼り付けて投稿していただくと、
解決が早いので次回からトライしてみていただければ。
(会社や個人固有の情報などが混ざらないように気をつける必要がありますが)


> クリックできたかの目検としてです。

であれば、テスト終了時に画面キャプチャを取得してくれるGebReportingTestの利用で今回は代替できるかもしれませんね。

以上です。よろしくお願いします。

2018年9月2日日曜日 23時26分14秒 UTC+9 7snow:

7snow

unread,
Sep 4, 2018, 9:59:18 AM9/4/18
to 日本Seleniumユーザーコミュニティ
回答ありがとうございます。できました!!すばらしい!!

■結果■
configに追加してreportを記述したことで、画面キャプチャできました、これすごく便利ですね。
(コードは下記のようにreportを追加すればよいこと、The Book Of Geb で読み取ることができました。)

----------------------------------------------------------------------------------------
    @Test
    void 自己紹介ページが表示されること() {
        withFrame('menu') { $('a', text: '自己紹介').click() }
report "自己紹介"
----------------------------------------------------------------------------------------

■アドバイスに対して■
>今回に限らずですが、エラーの時はコンソールなどに表示されるエラーメッセージをコピーして貼り付けて投稿していただくと、
>解決が早いので次回からトライしてみていただければ。
>(会社や個人固有の情報などが混ざらないように気をつける必要がありますが)

Junitの障害トレースにログが30行出力され何を載せてよいのか、よく分からない状態でした。
いま今になってログをよくみると、DIRが設定されてないという内容の、1行目の下記ログを投稿すればよかったと思いました。
改善します(^^;

 java.lang.IllegalStateException: No reports dir has been configured, you need to set in the config file or via the build adapter. 


以上です。

2018年9月3日月曜日 12時11分10秒 UTC+9 Yotaro Takahashi:
Reply all
Reply to author
Forward
0 new messages