如何在没有提交按钮的Geb(WebDriver)中提交表单

Mic*_*ryl 5 testing groovy webdriver geb web

我正在Geb(WebDriver)中构建一个测试,它需要使用没有提交按钮的表单.从用户的角度来看,它与在搜索词中输入并在键盘上按下回车键一样简单.

以纯脚本形式使用Geb,我可以通过在输入的文本中附加特殊键代码来解决这个问题,如下所示:

import org.openqa.selenium.Keys

$('input[id=myInputField]') << "michael"+Keys.ENTER
Run Code Online (Sandbox Code Playgroud)

这很好.但是,如果我想使用Geb推荐的页面对象模式(http://www.gebish.org/manual/0.7.1/pages.html#the_page_object_pattern),我看不到我应该做什么.我在EmployeeSearchPage对象的内容部分中定义了什么来复制缺少的searchButton及其"to"对象引用,告诉Geb如何处理结果页面?

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']") }
    }
}
Run Code Online (Sandbox Code Playgroud)

我意识到我可以在表单中添加一个提交按钮,我可以用于测试并使用CSS将其定位到用户的视图之外,但为什么我必须使应用程序适应测试?事情应该反过来.

我一直在评估很多Web测试框架,并发现这种类型的表单对许多人来说都是一个问题 - 至少就他们的文档而言.

有任何想法吗?谢谢!

erd*_*rdi 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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

to EmployeeSearchPage
searchField << 'michael' // searchField = 'michael' would have the same effect
submitForm()
Run Code Online (Sandbox Code Playgroud)