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

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

import org.openqa.selenium.Keys

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

很好但是,如果我想使用Geb推荐的Page Object模式(http://www.gebish.org/manual/0.7.1/pages.html#the_page_object_pattern),则看不到该怎么做。我如何在EmployeeSearchPage对象的内容部分中定义什么,以复制丢失的searchButton及其“至”对象引用,该引用告诉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将其放置在用户 View 之外,但是为什么我必须使应用程序适应测试呢?事情应该反过来工作。

我一直在评估许多Web测试框架,发现这种形式的表单对其中许多人来说都是一个问题-至少就其文档而言。

有任何想法吗?谢谢!

最佳答案

您无需使用js集成即可实现所需的功能。

您还可以在页面类上定义方法,而不仅仅是内容。您可以实现一个Submit方法,该方法可以通过以下方式完成您要查找的操作:

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()

关于testing - 如何在没有提交按钮的Geb(WebDriver)中提交表单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14201716/

10-12 14:52