iT邦幫忙

DAY 29
0

初探網站自動化測試系列 第 29

Modules 之二 (Geb Day 29)

## 額外傳參數給modules

Module

在Module內,要先宣告要接受傳入的參數名稱,例如「buttonName」。

class ExampleModule extends Module {
    def buttonName
    static content = {
        button { $("input", type: "submit", name: buttonName) }
    }
}

Page

theModule元素定義可接受一個傳入參數name,並會將此參數設定給ExampleModule的buttonName值。

class ExamplePage extends Page {
    static content = {
        theModule { name -> module ExampleModule, buttonName: name }
    }
}

Test script

如同ExamplePage所宣告的,此時theModule就可以接受一個傳入參數。

Browser.drive {
    to ExamplePage
    theModule("something").button.click()
}

Module包含其他Module

Module內可在包含其他Module,但不是透過繼承父類別的方式,這點要注意了。官方文件例子舉得很好,淺顯易懂,就不另外舉其他例子了。

class ExampleModule extends Module {
    static content = {
        innerModule { module InnerModule }
    }
}

class InnerModule extends Module {
    static content = {
        button { $("input", type: "submit") }
    }
}

class ExamplePage extends Page {
    static content = {
        theModule { module ExampleModule }
    }
}

Browser.drive {
    theModule.innerModule.button.click()
}

轉換成Java style

有好多參數傳來傳去頭都昏了,如果你跟我一樣,之前是Java背景的工程師,不仿可以先想像成下面這個例子,再去理解groovy code style。

class ExampleModule extends Module{
    private String buttonName;

    ExampleModule(String name){
       buttonName = name;
    }

    Object button(){
      return $("input", type: "submit", name: buttonName)
    }
}

class ExamplePage extends Page {
    ExampleModule theModule(String name){
       return new ExampleModule(name);
    }
}

class Test{
    public void main(String arg[]){
       ExamplePage examplePage = new ExamplePage();
       examplePage.theModule("something").button.click();
    }
}

上一篇
Modules (Geb Day 28)
下一篇
Javascript (Geb Day 30)
系列文
初探網站自動化測試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言