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

时间:2013-01-07 18:20:11

标签: testing groovy web webdriver geb

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

以纯脚本形式使用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及其“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']") }
    }
}

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

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

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:6)

您不需要使用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()

答案 1 :(得分:1)

Geb提供了在浏览器上下文中执行JavaScript的支持,可以找到详细信息here in the Geb documentation

您可以使用此提交表单,就像您在webapp本身中使用JavaScript提交表单一样。例如,如果您使用的是jQuery,那就简单如下:

js.exec('$("#myForm").submit()')